带条件的string_agg函数

时间:2018-12-26 13:48:36

标签: postgresql

我的查询

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 :(得分:0)

几种可能的方式...

首先,仅消除合计仅为“ 01”或“ 02”的任何结果:

<span class="gag-title">@Html.DisplayFor(modelItem => modelItem.Points)</span><br />

或者,您可以使用其他逻辑,例如,如果计数大于1(因此,不能为'01'或'02') OR 单个结果不是“ 01”或“ 02”:

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

'min'之所以起作用,是因为此时count> 1失败时,您知道您只有一个元素...因此min将是该元素的结果。