Условная группировка записей - PullRequest
1 голос
/ 21 апреля 2020

У меня проблема с группировкой записей в PostgreSQL. У меня есть структура, содержащая 3 столбца, неуникальный идентификатор, имя, группа (это старая система, и я не могу изменить эту структуру).

Примеры записей:

  id |   name   | group
-----+----------+------
  1  | product1 | 0
  1  | product1 | test
  2  | product2 | test
  3  | product3 | test123

Я хочу группы, неравные 0, которые будут объединены (получить идентификатор, имя первой записи из группы).

Ожидаемый результат:

  id |   name   | group
-----+----------+------
  1  | product1 | 0
  1  | product1 | test
  3  | product3 | test123

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

SELECT
    COUNT(CASE WHEN group = '0' THEN group END) +
    COUNT(DISTINCT CASE WHEN group <> '0' THEN group END) AS count
FROM
    table

Это правильный путь? Как я могу преобразовать его для извлечения записей?

1 Ответ

0 голосов
/ 21 апреля 2020

Вы можете использовать row_number():

select id, name, group
from (select t.*, row_number() over (partition by group order by id) as seqnum
      from t
     ) t
where seqnum = 1 or group = '0';

Примечание: group - действительно плохое имя для столбца. Это ключевое слово SQL, поэтому вы должны избегать имени. Я оставляю все как есть, потому что ваш запрос использует его.

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