Мне нужно выполнить среднее значение для столбца, но я знаю, что большинство значений в этом столбце будут равны нулю. Из всех возможных строк только две, вероятно, будут иметь положительные значения. Как я могу указать mySQL игнорировать нули и усреднять только фактические значения?
Mysql AVG игнорировать ноль
Ответы (4)
Предполагая, что вы, возможно, захотите не полностью исключать такие строки (возможно, у них есть значения в других столбцах, которые вы хотите агрегировать)
SELECT AVG(NULLIF(field ,0))
from table
person
Martin Smith
schedule
17.03.2011
Спасибо, это, вероятно, будет лучшим вариантом, потому что да, у меня есть значения в других столбцах!
- person Oranges13; 17.03.2011
это прекрасно работает, особенно когда в вашем запросе есть более 1 агрегатной функции.
- person Avishai; 02.01.2013
Спасибо, работает для меня!
- person Marco López; 09.12.2020
Спасибо! Я боролся с этим в течение нескольких минут.
- person CJL89; 28.05.2021
Вероятно, вы могли бы контролировать это с помощью предложения WHERE:
select avg( field ) from table where field > 0
person
Mark Wilkins
schedule
17.03.2011
Только если меня беспокоят строки, в которых поле больше нуля. К сожалению, в этом случае мне нужно проверить еще 3 столбца, где это может быть не так.
- person Oranges13; 17.03.2011
Вы можете преобразовать нули в NULL
, тогда функция AVG()
будет работать только с не NULL
значениями.
UPDATE table SET column = NULL WHERE column='0';
SELECT AVG(column) FROM table;
person
Barvajz
schedule
16.10.2012
Йиш. Изменить существующие данные, чтобы заставить
SELECT
работать? Я думаю, меня стошнит...
- person Matthew Clark; 23.12.2014
person
schedule
Это работает, за исключением того, что есть другие поля, которые я хочу получить одновременно с одним большим средним значением.
- person Oranges13; 17.03.2011