Khác nhau ở chỗ NULL có được đếm hay không:
COUNT(*)— đếm số dòng, kể cả dòng toàn NULL.COUNT(col)— đếm số dòng cócol IS NOT NULL.COUNT(DISTINCT col)— đếm số giá trị khác nhau, bỏ NULL.
sql
-- ratings: 5, NULL, 5, 3
SELECT COUNT(*), -- 4
COUNT(rating), -- 3
COUNT(DISTINCT rating), -- 2
AVG(rating) -- (5+5+3)/3 = 4.33, KHONG phai /4
FROM reviews;Mọi hàm tổng hợp (trừ COUNT(*)) đều bỏ qua NULL. Vì vậy AVG(rating) chia cho số dòng có giá trị, không phải tổng số dòng — nếu muốn coi NULL là 0 thì phải viết AVG(COALESCE(rating, 0)).
Bẫy đi kèm: COUNT trên tập rỗng trả về 0, nhưng SUM trên tập rỗng trả về NULL. Đoạn code cộng dồn hay lỗi ở đây, nên bọc COALESCE(SUM(amount), 0).