PostgreSQL查询:将不同ID范围的NAME按两列聚合输出
解决PostgreSQL条件聚合查询需求
很简单,咱们用条件聚合就能实现你要的效果——通过CASE WHEN配合聚合函数分别统计两个条件下的NAME,再用array_to_string和array_agg把结果转成逗号分隔的字符串。
假设你的表名为country(要是实际表名不一样,替换成你的表名就行),对应的SQL查询语句如下:
SELECT array_to_string(array_agg(CASE WHEN ID < 500 THEN NAME END), ', ') AS "column1 (ID < 500)", array_to_string(array_agg(CASE WHEN ID > 500 THEN NAME END), ', ') AS "column2 (ID > 500)" FROM country;
代码说明:
CASE WHEN ID < 500 THEN NAME END:只筛选出ID小于500的NAME,不符合条件的会返回NULL,而array_agg会自动忽略NULL值array_agg把符合条件的NAME收集成数组,再通过array_to_string转成逗号分隔的字符串- 整个查询不需要
GROUP BY,因为我们要的是全局的聚合结果(一行数据)
执行这个查询后,就能得到你期望的结果:
| column1 (ID < 500) | column2 (ID > 500) |
|---|---|
| China | Germany, Austria |
内容的提问来源于stack exchange,提问作者user6265779
相关产品推荐
相关产品推荐

