Условная группировка по (группировка похожих элементов) в PostgreSQL - PullRequest
2 голосов
/ 11 января 2012

У меня следующий запрос:

SELECT s.id,
       s.name,
       s.prom,
       s.some_other_field,
       ... many more fields also
FROM mytable s
INNER JOIN (on some other tables etc.)

В случае, когда существует более 6 записей с одинаковым именем (s.name), я хочу сгруппировать эти элементывместе как одна строка (мне все равно, какие другие данные сгруппированы в эту строку, т.е. первая запись этой группы будет в порядке).

Возможно ли это в Postgres?Я предполагаю, что это условная группа, в том смысле, что я хочу сгруппировать записи, в которых одно и то же имя появляется более 6 раз, , при этом все остальные записи возвращаются как обычно.

Любойпомощь очень ценится - спасибо!

1 Ответ

6 голосов
/ 11 января 2012

вы можете сделать это:

select * from (

    SELECT s.id,
           s.name,
           s.prom,
           s.some_other_field,
           ... many more fields also,
           row_number() over (partition by s.name order by s.id) as rnk,
           count(*) over (partition by s.name) cnt
    FROM mytable s
    INNER JOIN (on some other tables etc.)

) a
where cnt < 6 or (cnt >=6 and rnk = 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...