Как посчитать количество строк в агрегации строк в postgresql - PullRequest
0 голосов
/ 01 июня 2018

Итак, у меня есть таблица, которую я группирую, используя другие столбцы, такие как почтовые индексы, и я хочу объединить некоторые строки и узнать, какой их тип, довольно легко сделать с помощью функции агрегирования строк "string_agg (отличныйcolumn, ',' order by column)

Проблема в том, что при этом я не знаю, сколько строк каждого типа агрегируется

Так что, если моя таблица выглядит следующим образом:

column A 

Banana 

Monkey

Banana

Thailand

Banana

Monkey

Моя текущая агрегация возвращает поле с [Банан, Обезьяна, Таиланд]

Когда на самом деле я бы хотел, чтобы мой вывод на том же поле был [3 Банан, 2 Обезьяна, 1Таиланд]

мой текущий неработающий запрос агрегирования выглядит примерно так:

create table test as select count(a.*), STRING_AGG(cnt::text || ' ' || col, ', ' order by col), a.postcode, a.geom 
FROM tablewithdata a, 
(select col, COUNT(*) AS cnt, postcode, geom FROM tablewithdata 
GROUP BY col, postcode, geom) x 
group by a.postcode, a.geom

Возможно ли достичь этого результата?

1 Ответ

0 голосов
/ 01 июня 2018

Один из вариантов - сначала пройти по вашей таблице и сгенерировать счетчики, а затем собрать все вместе:

WITH cte AS (
    SELECT col, COUNT(*) AS cnt
    FROM yourTable
    GROUP BY col
)

SELECT STRING_AGG(cnt::text || ' ' || col, ', ' order by col)
FROM cte;

3 Banana, 2 Monkey, 1 Thailand

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...