I have a table with a column name
consisting of text values that I want to group by. Additionally I have a table value
consisting of numerical range values (of range type). I want to group by the name
column and get the outer bounds for each of the groups.
Here is an example:
Parameter table
x
name value
----- -----
Nominal power [1,2]
Nominal power [2,3]
Nominal power ratio [10,15]
Nominal power ratio [17,19]
Hydrogen production [1,6]
Hydrogen production [2,9]
Wanted output is something like this (or lower, upper bound in separate columns):
name outer range
----- -----
Nominal power [1,3]
Nominal power ratio [10,19]
Hydrogen production [1,9]
Here is a query I attempted to run, but it failed:
select name, upper(value), lower(value) from parameters
group by name
Is there a way to achieve this is Postgresql?
Advertisement
Answer
You need to use an aggregate function, e.g.: min(lower(value))
. From there you can create a new range:
select name, int4range(min(lower(value)), max(upper(value)), '[]')
from parameters
group by name;