如何有效地使用滤波器获得最小和最大?

时间:2019-06-06 16:36:18

标签: sql postgresql

我有这样的数据库(实际上比这个数据库大得多):

 value
-------
 10
 20
 50
 600
 70
 800

我想获得满足某些条件(where)的最小值和最大值。

我写了这些selects

select value
from records 
where value >= 50
order by value asc 
limit 1
select value
from records 
where value <= 600
order by value desc
limit 1

但是我可以一次select来更有效地做到这一点吗?

2 个答案:

答案 0 :(得分:1)

您可以在and子句中使用WHERE组合两个条件,并在min()上使用max()value函数。

select max(value) as Maximum, min(value) as Minimum
from records  
where value >= 50
and value <= 600

答案 1 :(得分:0)

更通用的方法使用条件聚合:

select max(value) filter (where value >= 50),
       min(value) filter (where value <= 600)
from records  ;

WHERE子句中的过滤功能可以解决您所遇到的问题。但是,它不能概括为两个以上的值。而且即使是其他对也很麻烦。