SQL中的聚合函数(SUM,AVG,COUNT等)始终自动排除NULL.
所以SUM(col)/ COUNT(col)= AVG(col) – 这很棒且一致.
COUNT(*)的特殊情况计算每一行.
如果组成一个带有NULL的表达式:A或B为A的B,则无论另一列为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;