从两列中的同一列中检索数据

时间:2019-01-09 13:54:21

标签: postgresql

我在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

2 个答案:

答案 0 :(得分:1)

类似的东西:

select (select string_agg(name, ', ') 
        from the_table
        where id <= 500) as column1, 
       (select string_agg(name, ', ') 
        from the_table
        where id > 500) as column2;

或者:

select string_agg(name, ', ') filter (where id <= 500) as column1, 
       string_agg(name, ', ') filter (where id > 500) as column2
from the_table;

答案 1 :(得分:1)

尝试使用条件聚合:

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;

enter image description here

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