sql >> Base de Datos >  >> RDS >> Mysql

MySQL:promedio con valores nulos

Las funciones agregadas (SUM, AVG, COUNT, etc.) en SQL siempre excluyen automáticamente NULL.

Entonces SUM(col) / COUNT(col) =AVG(col) - esto es genial y consistente.

El caso especial de COUNT(*) cuenta cada fila.

Si crea una expresión con NULL:A + B donde A o B es NULL, entonces A + B será NULL independientemente de que la otra columna sea NULL.

Cuando hay NULL, en general, AVG(A + B) <> AVG(A) + AVG(B), y es probable que también tengan diferentes denominadores. Tendría que envolver las columnas:AVG(COALESCE(A, 0) + COALESCE(B, 0)) para resolver eso, pero quizás también excluya el caso donde COALESCE(A, 0) + COALESCE(B, 0).

Según su código, sugeriría:

select avg(coalesce(col1, 0) + coalesce(col2, 0)), count(col3) from table1
where coalesce(col1, col2) is not null -- double nulls are eliminated
group by SomeArbitraryCol
having avg(coalesce(col1, 0) + coalesce(col2, 0)) < 500 and count(col3) > 3
order by avg(coalesce(col1, 0) + coalesce(col2, 0)) asc;