функция string_agg с условием - PullRequest
       2

функция string_agg с условием

0 голосов
/ 26 декабря 2018

Мой запрос

Select ID,string_agg(doc_id,',') from table group by ID;

Это дает мне

ID       DOC_ID
123      01,02,03
456      01
789      02
100      01,03

Теперь мне не нужны данные с doc_id как 01 и 02. Но если 01 и 02 приходят вместе с другими doc_id, тогда я хочу это в моем

Теперь, когда я бегу

Select ID,string_agg(doc_id,',') from table group by ID,doc_id having doc_id not in (02,03) ;

Это ничего не дает мне, тогда как я ожидаю

ID       DOC_ID
123      01,02,03
100      01,03

так как датьусловие со строкой agg?

1 Ответ

0 голосов
/ 26 декабря 2018

Пара возможных способов ...

Во-первых, просто исключите любой результат, в котором совокупность составляет только '01' или '02':

select
  id, string_agg (doc_id, ',')
from table
group by id
having
  array_agg (doc_id) not in ('{01}', '{02}')

Или вы можете использоватьдругая логика, например, если число больше 1 (следовательно, оно не может только быть '01' или '02') ИЛИ единственный результат не является '01' или '02 ':

select
  id, string_agg (doc_id, ',')
from table
group by id
having
  count (*) > 1 or
  min (doc_id) not in ('01', '02')

Мин. Работает, потому что в этот момент, когда счет> 1 не работает, вы знаете, что у вас есть только один элемент ... так что мин будет результатом этого одного элемента.

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