Aggregerade funktioner (SUM, AVG, COUNT, etc) i SQL exkluderar alltid NULL automatiskt.
Så SUM(kol) / COUNT(kol) =AVG(kol) - det här är bra och konsekvent.
Specialfallet COUNT(*) räknar varje rad.
Om du skapar ett uttryck med NULL:A + B där antingen A eller B är NULL, kommer A + B att vara NULL oavsett om den andra kolumnen är NULL.
När det finns NULL, i allmänhet, AVG(A + B) <> AVG(A) + AVG(B), och de kommer sannolikt att ha olika nämnare också. Du skulle behöva radbryta kolumnerna:AVG(COALESCE(A, 0) + COALESCE(B, 0)) för att lösa det, men kanske också utesluta fallet där COALESCE(A, 0) + COALESCE(B, 0).
Baserat på din kod skulle jag föreslå:
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;