2010-07-11 74 views
2

我想知道是否可以在查询中以某种方式针对每个返回行中的条件测试某个值?SQL - 字段值的条件?

例如为: 我列:

X Y Z 
-1 1 2 
2 2 -1 
3 -1 3 

我想用AVG()对于除-1所有值。我不能使用<> -1,因为每行都包含一次。

+0

应为-2这样的价值会发生什么? – 2010-07-11 09:38:40

+0

这是一个错字,抱歉。 – Thomas 2010-07-11 09:41:44

+0

你使用了什么数据库? – 2010-07-11 09:49:59

回答

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,但我怀疑这是你想要的。

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; 
+0

对于'x <> -1'等,可能会更好,因为您当前的查询只允许大于零的值。 – Mike 2010-07-11 09:49:07