Các hàm tổng hợp (SUM, AVG, COUNT, v.v.) trong SQL luôn tự động loại trừ NULL.
Vì vậy, SUM (col) / COUNT (col) =AVG (col) - điều này rất tuyệt và nhất quán.
Trường hợp đặc biệt của COUNT (*) đếm mọi hàng.
Nếu bạn tạo một biểu thức với NULL:A + B trong đó A hoặc B là NULL, thì A + B sẽ là NULL bất kể cột khác là NULL.
Nói chung, khi có NULL, AVG (A + B) <> AVG (A) + AVG (B), và chúng cũng có thể có các mẫu số khác nhau. Bạn sẽ phải bao gồm các cột:AVG (COALESCE (A, 0) + COALESCE (B, 0)) để giải quyết điều đó, nhưng có lẽ cũng loại trừ trường hợp COALESCE (A, 0) + COALESCE (B, 0).
Dựa trên mã của bạn, tôi sẽ đề xuất:
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;