Попытка агрегировать значения таблицы postgres с повторяющимися значениями - PullRequest
0 голосов
/ 28 мая 2018

У меня есть таблица с двумя столбцами: первый столбец идентификатора (назовем его идентификатором) и второй столбец значения (назовем его ЗНАЧЕНИЕМ).Столбец VALUE может иметь два значения: «Один» и «Два».Большинство идентификаторов появляются один раз в таблице со значением «Один» ИЛИ «два».Однако есть несколько идентификаторов, которые дважды появляются в столбце: один раз со значением «Один» и второй раз со значением «Два».Я сейчас пытаюсь написать запрос, который приводит к таблице с двумя столбцами, в которой все идентификаторы появляются только один раз.Первый столбец должен содержать идентификатор, второй должен содержать значения «Один», «Два» или «Один и два» в случае, если идентификатор имел два значения в исходной таблице.Мой запрос до сих пор:

WITH (
    SELECT id, 'One & Two' as value 
        FROM table_name
        GROUP BY id HAVING COUNT(*) = 2
 ) AS  both_values, (
    SELECT id, value 
        FROM table_name
      WHERE id NOT IN (SELECT id FROM both_values)
     ) AS other_values
 SELECT * FROM other_values
 UNION
 SELECT * FROM both_values;

Этот шов не работает, и мне не удается написать простой запрос, чтобы получить этот результат.Может кто-нибудь помочь мне, пожалуйста?

РЕДАКТИРОВАТЬ: добавление :: varchar после того, как 'One & Two' сделал это.Тем не менее, это не кажется мне эффективным запросом.Любые иды, чтобы оптимизировать это?

1 Ответ

0 голосов
/ 28 мая 2018

Нашли решение:

SELECT STRING_AGG(DISTINCT value, ' & ' ORDER BY value),id    
    FROM table_name
    GROUP BY id

Не так уж сложно ...

...