我想知道我是否可以在查询中以某种方式测试每个返回行中的条件的某些值?
例如为: 我有专栏:
X Y Z
-1 1 2
2 2 -1
3 -1 3
我想对除-1之外的所有值使用avg()。我不能使用<> -1,每行包含一次。
答案 0 :(得分:2)
使用WHERE过滤掉您不希望包含在平均值中的值,例如包括除-1之外的所有数字:
SELECT
(SELECT AVG(x) FROM table1 WHERE x >= 0) AS x,
(SELECT AVG(y) FROM table1 WHERE y >= 0) AS y,
(SELECT AVG(z) FROM table1 WHERE z >= 0) AS z
请注意,如果确实想要包含除问题中所说的-1之外的所有数字,那么您应该将WHERE子句更改为x <> -1
但我怀疑这是你的意思想。
答案 1 :(得分:2)
尝试以下方法:
SELECT AVG(IF(x <> -1, x, NULL)) AS avgX,
AVG(IF(y <> -1, y, NULL)) AS avgY,
AVG(IF(z <> -1, x, NULL)) AS avgZ
FROM mytable;