我在 PostgreSQL 中有一个表,如下所示:
ID NAME
450 China
525 Germany
658 Austria
我想查询 ID < 500 和 ID > 500 的每个名称,并使用
在两列中检索结果array_to_string(array_agg(NAME), ', ').
我需要以下结果:
column1 (ID < 500) column2 (ID > 500)
China Germany, Austria
最佳答案
尝试使用条件聚合:
SELECT
STRING_AGG(CASE WHEN ID < 500 THEN NAME END, ', ') AS ID_lt_500,
STRING_AGG(CASE WHEN ID >= 500 THEN NAME END, ', ') AS ID_gt_500
FROM yourTable;
Demo
编辑:
如果您使用的 Postgres 版本不支持 STRING_AGG
,请按照您已经执行的操作进行操作:
SELECT
ARRAY_TO_STRING(ARRAY_AGG(CASE WHEN ID < 500 THEN NAME END), ', ') AS ID_lt_500,
ARRAY_TO_STRING(ARRAY_AGG(CASE WHEN ID >= 500 THEN NAME END), ', ') AS ID_gt_500
FROM yourTable;
Demo
关于postgresql - 检索两列中同一列的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54111755/