SQLの集計関数(SUM、AVG、COUNTなど)は常に自動的にNULLを除外します。
したがって、SUM(col)/ COUNT(col)=AVG(col)-これは素晴らしく、一貫性があります。
COUNT(*)の特殊なケースでは、すべての行がカウントされます。
NULLで式を作成する場合:A + BここでAまたはBのいずれかがNULLの場合、他の列がNULLであるかどうかに関係なく、A+Bは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;