Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL:média com nulos


Funções agregadas (SUM, AVG, COUNT, etc) em SQL sempre excluem automaticamente NULL.

Então SUM(col) / COUNT(col) =AVG(col) - isso é ótimo e consistente.

O caso especial de COUNT(*) conta cada linha.

Se você criar uma expressão com NULLs:A + B onde A ou B é NULL, então A + B será NULL, independentemente de a outra coluna ser NULL.

Quando há NULLs, em geral, AVG(A + B) <> AVG(A) + AVG(B), e eles provavelmente também terão denominadores diferentes. Você teria que quebrar as colunas:AVG(COALESCE(A, 0) + COALESCE(B, 0)) para resolver isso, mas talvez também excluir o caso em que COALESCE(A, 0) + COALESCE(B, 0).

Com base no seu código, sugiro:
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;