我想基于if条件计算列的平均值,但是我遇到了问题,因为如果某个值在一定范围内,我想将其设置为其他目的计算平均值。
基本上,我尝试过以下各种变体:
SELECT avg(IF(CAST(值AS SIGNED)< 550,value,100))AS输出......
换句话说,我想只包括小于550的值作为平均值的一部分,否则返回该单元格的100作为平均值的一部分。所以,如果我有以下值:
150,200,600,650
然后查询将计算这些值的平均值:
100,100,600,650。
有什么方法可以实现这一目标吗?除了上面的查询的变化似乎不起作用,我尝试使用一个中间步骤,创建一个新列的实际值,需要输入到平均值,但这似乎使查询更多执行速度较慢。
谢谢!
答案 0 :(得分:4)
只需转动IF
...,
SELECT AVG(IF(CAST(value AS SIGNED) < 550, 100, value)) AS output...
答案 1 :(得分:3)
AVG(CASE WHEN value < 550 THEN 100 ELSE value END)
答案 2 :(得分:1)
select avg(case when value < 550 then 100 else value end) as output...