我在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
答案 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;
编辑:
如果您使用的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;