Fungsi agregat (SUM, AVG, COUNT, dll) dalam SQL selalu secara otomatis mengecualikan NULL.
Jadi SUM(col) / COUNT(col) =AVG(col) - ini bagus dan konsisten.
Kasus khusus COUNT(*) menghitung setiap baris.
Jika Anda membuat ekspresi dengan NULL:A + B di mana A atau B adalah NULL, maka A + B akan menjadi NULL terlepas dari kolom lainnya adalah NULL.
Jika ada NULL, secara umum, AVG(A + B) <> AVG(A) + AVG(B), dan kemungkinan penyebutnya juga berbeda. Anda harus membungkus kolom:AVG(COALESCE(A, 0) + COALESCE(B, 0)) untuk menyelesaikannya, tetapi mungkin juga mengecualikan kasus di mana COALESCE(A, 0) + COALESCE(B, 0).
Berdasarkan kode Anda, saya akan menyarankan:
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;