Как подсчитать повторяющиеся строки внутри postgres?
Я хочу иметь возможность создавать гистограмму из кортежа, содержащего два целых значения. Использование postgresql.
вот это запрос:
SELECT temp.ad_id, temp.distance as hits FROM (
'UNION ALL .join(cupound_query)' # python
) as temp GROUP BY temp.ad_id,temp.distance
редактировать : лучший пример того, чего я хочу!--4-->
для этого входной сигнал:
(51, 5)
(51, 0)
(51, 3)
(51, 0)
(88, 2)
(88, 2)
(88, 2)
(84, 1)
(81, 9)
будет:
(88,2) : 3
(51,0) : 2
(51,3) : 1
(51,5) : 1
(84,1) : 1
(81,9) : 1
как я могу создать гистограмму этих ценностей ? Иначе говоря, как я могу сосчитать, сколько раз? у строки есть дубликат ?
спасибо
3 ответов
ваш вопрос оставляет место для интерпретации. Этот тестовый набор показывает 2 вложенных шага:
CREATE TEMP TABLE x (ad_id int, distance int);
INSERT INTO x VALUES
(510, 0),(956, 3),(823, 3),(880, 2)
,(523, 3),(467, 0),(843, 1),(816, 9)
,(533, 4),(721, 7),(288, 3),(900, 3)
,(526, 9),(750, 7),(302, 8),(463, 6)
,(742, 8),(804, 2),(62, 7),(880, 2)
,(523, 3),(467, 0),(843, 1),(816, 9)
,(533, 4),(721, 7),(288, 3),(900, 3)
,(526, 9),(750, 7),(302, 8),(816, 9)
,(533, 4),(721, 7),(288, 3),(900, 3)
,(533, 4),(721, 7),(288, 3),(396, 5);
сколько дубликатов на значение ?
SELECT ad_id, count(*) AS ct FROM x GROUP BY 1;
результат:
ad_id | ct
-------+----
62 | 1
288 | 4
302 | 2
396 | 1
...
читать: ad_id 62
существует 1x, 4 раза ...
" как я могу подсчитать, сколько раз строка имеет дубликат?"
SELECT ct
,COUNT (*) AS ct_ct
FROM (SELECT ad_id, COUNT (*) AS ct FROM x GROUP BY 1) a
GROUP BY 1
ORDER BY 1;
результат:
ct | ct_ct
----+---
1 | 8
2 | 7
3 | 2
4 | 3
Читать: 8 случаев "ad_id
уникально", 7 вхождений " 2 строк с одинаковыми ad_id
", ...
Ниже приведен учебник, который я написал о том, как создавать гистограммы непосредственно в SQL с помощью Postgres:
Я думаю, вы можете легко адаптировать этот пример к своей структуре таблицы.