我想计算一列的平均值,但我会卡住,因为如果一个值在某个范围内而不是我想要包含它。
所以,如果我有以下值:
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。 谢谢!
答案 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;