在mySQL中将IF与AVG结合起来

时间:2011-02-14 17:39:18

标签: sql mysql database

我想基于if条件计算列的平均值,但是我遇到了问题,因为如果某个值在一定范围内,我想将其设置为其他目的计算平均值。

基本上,我尝试过以下各种变体:

SELECT avg(IF(CAST(值AS SIGNED)< 550,value,100))AS输出......

换句话说,我想只包括小于550的值作为平均值的一部分,否则返回该单元格的100作为平均值的一部分。所以,如果我有以下值:

150,200,600,650

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

100,100,600,650。

有什么方法可以实现这一目标吗?除了上面的查询的变化似乎不起作用,我尝试使用一个中间步骤,创建一个新列的实际值,需要输入到平均值,但这似乎使查询更多执行速度较慢。

谢谢!

3 个答案:

答案 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...