Aggregatfunktionen (SUM, AVG, COUNT usw.) in SQL schließen NULL immer automatisch aus.
Also SUM(col) / COUNT(col) =AVG(col) – das ist großartig und konsistent.
Der Sonderfall von COUNT(*) zählt jede Zeile.
Wenn Sie einen Ausdruck mit NULL-Werten erstellen:A + B, wobei entweder A oder B NULL ist, dann ist A + B NULL, unabhängig davon, ob die andere Spalte NULL ist.
Wenn NULLen vorhanden sind, gilt im Allgemeinen AVG(A + B) <> AVG(A) + AVG(B), und sie haben wahrscheinlich auch unterschiedliche Nenner. Sie müssten die Spalten AVG(COALESCE(A, 0) + COALESCE(B, 0)) umbrechen, um das zu lösen, aber vielleicht auch den Fall ausschließen, in dem COALESCE(A, 0) + COALESCE(B, 0).
Basierend auf Ihrem Code würde ich vorschlagen:
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;