Aggregerede funktioner (SUM, AVG, COUNT osv.) i SQL ekskluderer altid automatisk NULL.
Så SUM(col) / COUNT(col) =AVG(col) - dette er fantastisk og konsekvent.
Specialtilfældet COUNT(*) tæller hver række.
Hvis du laver et udtryk med NULL:A + B, hvor enten A eller B er NULL, så vil A + B være NULL, uanset om den anden kolonne er NULL.
Når der er NULLs, generelt, AVG(A + B) <> AVG(A) + AVG(B), og de vil sandsynligvis også have forskellige nævnere. Du skal pakke kolonnerne:AVG(COALESCE(A, 0) + COALESCE(B, 0)) for at løse det, men måske også udelukke tilfældet, hvor COALESCE(A, 0) + COALESCE(B, 0).
Baseret på din kode vil jeg foreslå:
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;