计算特定值的平均值

时间:2016-05-17 10:00:25

标签: sql postgresql

我想计算一列的平均值,但我会卡住,因为如果一个值在某个范围内而不是我想要包含它。

所以,如果我有以下值:

100, 150, 500, 450, 300, 750

现在,我想只包括大于400的值作为平均值的一部分。

然后查询将计算这些值的平均值:

500, 450, 750

,输出为(500 + 450 + 750)/ 3

我试过

1)

select avg(case when value > 400 then value else 0 end) avg_val
from test

这是输出为(0 + 0 + 500 + 450 + 0 + 750)/ 6。这不是我想要的!

2)

select SUM(case when value > 400 then value else 0 end) /
           SUM(case when value > 400 then 1 else 0 end) avg_val
from test

如果没有大于400的值,则会抛出错误divide by zero

有人可以帮忙吗?我正在使用PostgreSQL。 谢谢!

3 个答案:

答案 0 :(得分:3)

好吧,AVG()不会计算空值,因此您可以使用查询并将{0}替换为NULL

select avg(case when value > 400 then value else null end) avg_val
from test

也可以在没有else部分的情况下格式化,因为else的默认值为NULL

select avg(case when value > 400 then value end) avg_val
from test

答案 1 :(得分:3)

简单地:

select avg(value)
from test
where value > 400

答案 2 :(得分:-1)

SELECT AVG(价格)AS PriceAverage FROM产品,价格在10到30之间;

SELECT AVG(价格)AS PriceAverage FROM bidding,其中价格> = 2500;