2010-07-11 2 views
2

Я хотел бы знать, могу ли я проверить какое-либо значение по отношению к условию в каждой возвращаемой строке каким-то образом в запросе?SQL - условие на значение поля?

.: например у меня есть колонки:

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

Я хочу использовать AVG() для всех значений -1, за исключением. Я НЕ МОЖЕТ использовать, где <> -1, поскольку каждая строка содержит его один раз.

+0

Что должно произойти со значением такого как -2? –

+0

Это была опечатка, извините. – Thomas

+0

Какую базу данных вы используете? –

ответ

2

Используйте КУДА отфильтровать значения, которые вы не хотите, чтобы включить в среднем, например, чтобы включить все числа в среднем за исключением -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