MySQL: как получить только средние положительные значения? - PullRequest
3 голосов
/ 07 июля 2011

Предположим, у меня есть столбец INT, и я использую -1, чтобы показать, что на момент вставки данных не было.Я хотел бы получить AVG для всех значений этого столбца, которые равны 0 или больше.

Возможно ли это?

Спасибо.


Я забыл упомянуть, что я делаю это вместе с другими AVG, так что выберите avg (a), avg (b), avg (d) на вкладке;... так что я не могу использовать b> 0 ... потому что другие должны использовать данные строки независимо от того, являются ли данные этого одного столбца -1.

Мне кажется, что я мог бы увеличитьРезультат AVG, например, если он обычно будет (4 + 5 + -1 + -1 + 6) / 5. Но если я знаю, сколько существует -1, я мог бы «исправить» результат, чтобы исключить их.

Ответы [ 4 ]

5 голосов
/ 07 июля 2011

Это может помочь:

Если вы хотите игнорировать значения -1 из среднего значения:

SELECT AVG(`a`), AVG(IF(`b` > -1, `b`, NULL)), AVG(`c`) FROM `t`;

Если вы хотите рассмотреть значения -1 в среднем:

SELECT AVG(`a`), AVG(IF(`b` > -1, `b`, 0)), AVG(`c`) FROM `t`;

Я принял фиктивные имена столбцов и таблиц и принял столбец b, для которого вы хотите рассматривать только значения> = 0. Пожалуйста, не стесняйтесь вводить имена в соответствии с вашей схемой.

4 голосов
/ 07 июля 2011
SELECT AVG(`field`) FROM `table` WHERE `field` >= 0
2 голосов
/ 07 июля 2011

Пожалуйста, используйте это:

SELECT    AVG(Column),   
 SUM(IF(Column>0))/COUNT(IF(Column>0))
 FROM Table
0 голосов
/ 07 июля 2011

Не могли бы вы сделать что-то подобное

SUM(column) / COUNT(*) as Average FROM 'table' WHERE 'column' >= 0
...