Функция count()
игнорирует нули (т. Е. НЕ увеличивает значение, если встречает ноль), поэтому я предлагаю просто подсчитать значения, а затем может содержать нули, которые вы хотите игнорировать.
dow datecol value
6 21/09/2018 17
6 28/09/2018 29
6 05/10/2018 Null
например, sum(value)
выше = 46, и count(value)
= 2, поэтому среднее значение равно 23,0 (и avg(value)
также вернет 23,0, поскольку оно также игнорирует нули)
select
weekday
, `date`
, `count`
, (select (sum(`count`) * 1.0) / (count(`count`) * 1.0)
from atable as t2
where t2.weekday = t1.weekday
and t2.`date` < t1.`date
order by t2.`date` DESC
limit 3
) as average
from atable as t1
Вы можете просто использовать avg(count)
взапрос выше, и получите тот же результат.
пс.Я надеюсь, что вы НЕ используете count
в качестве имени столбца!Я бы также посоветовал вам НЕ использовать date
в качестве имени столбца.т.е. избегать использования терминов SQL в качестве имен.