Обобщените функции (SUM, AVG, COUNT и т.н.) в SQL винаги изключват NULL.
Така че SUM(col) / COUNT(col) =AVG(col) - това е страхотно и последователно.
Специалният случай на COUNT(*) отчита всеки ред.
Ако съставите израз с NULL:A + B, където A или B е NULL, тогава A + B ще бъде NULL, независимо дали другата колона е NULL.
Когато има NULL, като цяло, AVG(A + B) <> AVG(A) + AVG(B), и те вероятно също ще имат различни знаменатели. Ще трябва да увиете колоните:AVG(COALESCE(A, 0) + COALESCE(B, 0)), за да решите това, но може би също така да изключите случая, когато COALESCE(A, 0) + COALESCE(B, 0).
Въз основа на вашия код бих предложил:
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;