如果我使用array_agg
来收集名称,我会用逗号分隔我的名称,但如果存在null
值,则该空值也会被视为聚合中的名称。 例如:
SELECT g.id,
array_agg(CASE WHEN g.status= 'Y' THEN g.name ELSE NULL END) able_users,
array_agg(CASE WHEN g.status= 'N' THEN g.name ELSE NULL END) unable_users
FROM users g
GROUP BY g.type;
返回NULL,张三,李四,
而不仅仅是张三,李四。
解决方法,用空字符串替换
SELECT g.id,
coalesce( array_agg(g.name) FILTER (WHERE g.status = 'Y'), '' ) able_users,
coalesce( array_agg(g.name) FILTER (WHERE g.status = 'N'), '' ) unable_users
FROM users g
GROUP BY type;