我在PostgreSQL中有一个表,如下所示:

ID      NAME
450     China
525     Germany
658     Austria

我想查询I d500的每个名称,并使用
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;

postgresql - 从两列中的同一列中检索数据-LMLPHP
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/

10-16 15:19