Как подсчитать повторяющиеся строки внутри 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", ...


просто добавить count(*) на ваш выбор:

SELECT temp.ad_id, temp.distance as hits, count(*)
....

Ниже приведен учебник, который я написал о том, как создавать гистограммы непосредственно в SQL с помощью Postgres:

простые гистограммы в SQL

Я думаю, вы можете легко адаптировать этот пример к своей структуре таблицы.