snippetsqlMinor
Accumulate values into an array with Postgres
Viewed 0 times
postgresaccumulateintowitharrayvalues
Problem
Currently I have this query:
So if
the query will return:
How can I replace the
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;So if
my_table has the values:property_type | price
--------------+-------
FLAT | 5000
SEMIDETACHED | 9000
FLAT | 6000the query will return:
Flat_Current_Asking_Price | Semidetached_Current_Asking_Price
--------------------------+-----------------------------------
11000 | 9000How can I replace the
sum to accumulate the values into arrays to get?Flat_Current_Asking_Price | Semidetached_Current_Asking_Price
--------------------------+-----------------------------------
{5000, 6000} | {9000}Solution
If your PostggreSQL version is 9.4 or later use
FILTER clause: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;Code Snippets
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;Context
StackExchange Database Administrators Q#182185, answer score: 9
Revisions (0)
No revisions yet.