SQL-字段值的条件?

SQL-字段值的条件?,sql,syntax,Sql,Syntax,我想知道我是否可以在查询中根据每个返回行中的条件测试一些值 e、 g: 我有以下专栏: X Y Z -1 1 2 2 2 -1 3 -1 3 我想对除-1之外的所有值使用avg()。我不能使用where-1,因为每行只包含一次。使用where过滤掉不希望包含在平均值中的值,例如,在平均值中包含除-1以外的所有数字: SELECT (SELECT AVG(x) FROM table1 WHERE x >= 0) AS x, (SELECT AVG

我想知道我是否可以在查询中根据每个返回行中的条件测试一些值

e、 g: 我有以下专栏:

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

我想对除-1之外的所有值使用avg()。我不能使用where-1,因为每行只包含一次。

使用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
,但我怀疑这是否是您想要的。

尝试以下操作:

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;
选择AVG(如果(x-1,x,NULL))作为avgX,
平均值(如果(y-1,y,NULL))作为平均值,
AVG(如果(z-1,x,NULL))作为avgZ
从mytable;

使用诸如-2之类的值会发生什么情况?使用
x-1
等可能会更好,因为您当前的查询只允许大于零的值。