Le funzioni aggregate (SUM, AVG, COUNT, ecc.) in SQL escludono sempre automaticamente NULL.
Quindi SUM(col) / COUNT(col) =AVG(col) - questo è fantastico e coerente.
Il caso speciale di COUNT(*) conta ogni riga.
Se crei un'espressione con NULL:A + B dove A o B è NULL, allora A + B sarà NULL indipendentemente dal fatto che l'altra colonna sia NULL.
Quando ci sono NULL, in generale, AVG(A + B) <> AVG(A) + AVG(B), e probabilmente avranno anche denominatori diversi. Dovresti avvolgere le colonne:AVG(COALESCE(A, 0) + COALESCE(B, 0)) per risolverlo, ma forse escludere anche il caso in cui COALESCE(A, 0) + COALESCE(B, 0).
In base al tuo codice, suggerirei:
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;