使用 Postgres 将值累积到数组中

Ran*_*ize 6 postgresql aggregate array aggregate-filter

目前我有这个查询:

select 
    sum(case when my_table.property_type = 'FLAT' then my_table.price else 0 end) as Flat_Current_Asking_Price,
    sum(case when my_table.property_type_mapped = 'SEMIDETACHED' then my_table.price else 0 end) as Semidetached_Current_Asking_Price
from 
    my_table;
Run Code Online (Sandbox Code Playgroud)

所以如果my_table有以下值:

property_type | price
--------------+-------
FLAT          | 5000
SEMIDETACHED  | 9000
FLAT          | 6000
Run Code Online (Sandbox Code Playgroud)

查询将返回:

Flat_Current_Asking_Price | Semidetached_Current_Asking_Price
--------------------------+-----------------------------------
11000                     | 9000
Run Code Online (Sandbox Code Playgroud)

如何替换将sum值累积到数组中以获取?

Flat_Current_Asking_Price | Semidetached_Current_Asking_Price
--------------------------+-----------------------------------
{5000, 6000}              | {9000}
Run Code Online (Sandbox Code Playgroud)

Abe*_*sto 7

如果您的 PostggreSQL 版本是 9.4 或更高版本,请使用FILTER子句:

select
    array_agg(my_table.price) filter(where my_table.property_type = 'FLAT' ) as Flat_Current_Asking_Price,
    array_agg(my_table.price) filter(where my_table.property_type = 'SEMIDETACHED') as Semidetached_Current_Asking_Price
from 
    my_table;
Run Code Online (Sandbox Code Playgroud)