COALESCE cho giá trị NULL
Thuộc phần Vượt ra ngoài kiến thức cơ bản trong hành trình SQL của Coddy. Bài học 3 trên 27.
COALESCE trả về đối số đầu tiên không phải là NULL:
COALESCE(nickname, first_name, 'Anonymous')Đọc từ trái sang phải và dừng ở giá trị khác null đầu tiên. Đây là cách gọn nhất để cung cấp giá trị dự phòng trong truy vấn mà không cần CASE.
Các cách dùng phổ biến:
- Hiển thị
0thay vìNULLtừLEFT JOIN:COALESCE(SUM(amount), 0) - Chọn trường tùy chọn đầu tiên không rỗng:
COALESCE(mobile, home, work)
Thử thách
DễCác bảng và cột hiện có:
users:id,display_name,orders:user_id,amount
Trả về một hàng cho mỗi người dùng, gồm:
idlabel:display_namenếu có, nếu không thì dùngemail, nếu không thì dùng'unknown'total_spent: tổngamounttrong đơn hàng của người dùng; người dùng không có đơn hàng thì hiển thị0(không phảiNULL)
Sắp xếp theo id. Gợi ý: dùng LEFT JOIN từ users sang orders cùng với COALESCE(SUM(...), 0) để xử lý các hàng bị thiếu.
Tự làm thử
SELECT u.id,
-- label qua COALESCE
-- total_spent qua COALESCE(SUM(...), 0)
FROM users u
LEFT JOIN orders o ON o.user_id = u.id
GROUP BY u.id
ORDER BY u.id
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Vượt ra ngoài kiến thức cơ bản
6Công thức phân tích dữ liệu
Top N trong mỗi nhómTỷ lệ trên tổngTổng lũy kếGiữ lại một hàng cho mỗi khóaÔn tập: khách hàng hàng đầuTự luyện tập: Playground SQL