【发布时间】:2020-06-29 13:30:34
【问题描述】:
我有一张桌子:
name | doc | filter
NAME1 | DOC1 | A1
NAME1 | DOC1 | B1
NAME1 | DOC1 | C1
NAME2 | DOC2 | A1
NAME2 | DOC2 | D1
NAME2 | DOC2 | C1
NAME3 | DOC3 | B1
NAME3 | DOC3 | A1
所以我创建了一个SELECT 命令:
SELECT name, doc, array_agg(filter) filter from table group by name, doc,这个返回:
name | doc | filter
NAME1 | DOC1 | {A1,B1,C1}
NAME2 | DOC2 | {A1,D1,C1}
NAME3 | DOC3 | {B1,A1}
我正在尝试使用以下代码在先前的表中创建SELECT 命令:
sum(case when array_agg(filter)::char like '%C1%' then 1 else 0 end) as "TOTAL"
但我收到错误:
聚合函数调用不能嵌套
如何解决?如果我想再添加一个这样的过滤器:
sum(case
when array_agg(filter)::char like '%C1%' or array_agg(filter)::char like '%C2%'
then 1 else 0
end) as "TOTAL"`
怎么办?
【问题讨论】:
-
array_agg(filter)::char like '%C1%'对我来说没有任何意义(如果你想转换一个数组,你应该把它转换成::text)。你想在那里做什么?计算filter列中C1的值的数量?请edit您的问题(通过单击其下方的edit 链接)并添加一些示例数据和基于该数据的预期输出为formatted text。请参阅here,了解有关如何创建漂亮的文本表的一些提示。 -
您是否正在寻找
count(*) filter (where "filter" = 'C1')? -
@a_horse_with_no_name
filter是我需要找到的许多值的数组 -
@a_horse_with_no_name 过滤器是其他表创建的字段
-
@a_horse_with_no_name 我更新我的帖子。
标签: sql arrays postgresql group-by count