Bài học theo mô-đun (3/4)
Logic có điều kiện: TRƯỜNG HỢP KHI
Mọi thứ chúng ta đã thấy cho đến nay đều trích xuất dữ liệu nguyên trạng. Tuy nhiên, thường thì bạn muốn
để chuyển đổi nó: phân loại tiền lương thành các bậc, đánh dấu những người mới tuyển dụng là
"Junior", dịch mã số thành nhãn có thể đọc được. tiêu chuẩn của SQL
công cụ cho việc này được gọi là CASE WHEN.
Cú pháp: một if/else nhỏ
CASE
WHEN condition_1 THEN value_1
WHEN condition_2 THEN value_2
...
ELSE default_value
ENDNó đọc chính xác như if/else if/else trong bất kỳ ngôn ngữ nào: SQL đánh giá
các điều kiện theo thứ tự và dừng ở điều kiện đúng đầu tiên, trả về
tương ứng value. Nếu không đúng thì nó sẽ trả về giá trị ELSE. Nếu bạn
bỏ qua ELSE và không có nhánh nào khớp, nó sẽ trả về NULL.
-- Classify employees by salary tier:
SELECT first_name,
last_name,
salary,
CASE
WHEN salary >= 50000 THEN 'Senior'
WHEN salary >= 35000 THEN 'Mid'
ELSE 'Junior'
END AS tier
FROM employees;CASE nằm bên trong SELECT: nó tạo ra một cột giống như bất kỳ cột nào
và việc đặt bí danh bằng AS là điều hoàn toàn bình thường (ở đây
tier).
Sử dụng CASE ở đâu
Ba địa điểm định kỳ:
- Trong
SELECTđể tạo các cột dẫn xuất (ví dụ ở trên). - Trong
ORDER BYđể sắp xếp "tùy chỉnh":SQLORDER BY CASE department_id WHEN 1 THEN 0 ELSE 1 END, last_name; -- Engineering first, then the rest, alphabetically by last name. - Bên trong các hàm tổng hợp để "đếm có điều kiện":
Mẫu này —SQL
SELECT COUNT(*) AS total, SUM(CASE WHEN salary >= 50000 THEN 1 ELSE 0 END) AS senior, SUM(CASE WHEN salary < 35000 THEN 1 ELSE 0 END) AS junior FROM employees;SUM(CASE WHEN … THEN 1 ELSE 0 END)— là mẫu phổ biến nhất "số có điều kiện" được sử dụng trong trang tổng quan.
Hình thức "cô đọng"
Ngoài ra còn có một biến thể ngắn hơn khi bạn so sánh một biểu thức chống lại các giá trị chính xác:
CASE department_id
WHEN 1 THEN 'Ingegneria'
WHEN 2 THEN 'Vendite'
ELSE 'Altro'
ENDNó tương đương với CASE WHEN department_id = 1 THEN ... WHEN department_id = 2 THEN ... END, chỉ nhỏ gọn hơn. Nó chỉ hoạt động với sự bình đẳng chính xác: nếu
bạn cần >= hoặc một so sánh khác, bạn phải quay lại phần mở rộng
hình thức.
Hãy thử nó
Đối với mỗi nhân viên, hãy hiển thị tên (first_name), họ (last_name) và cột 'cấp' là 'Alto' nếu mức lương ít nhất là 50000, nếu không thì là 'Tiêu chuẩn'. Ba cột, một hàng cho mỗi nhân viên.
Hiển thị gợi ý
Điều kiện là lương >= 50000. Hãy nhớ đóng CASE bằng END và sử dụng bí danh 'tier'.
Giải pháp khả dụng sau 3 lần thử
Xem lại bài tập
Đối với mỗi bộ phận (department_id), hãy đếm xem có bao nhiêu nhân viên có mức lương cao (>= 50000) và bao nhiêu nhân viên có mức lương tiêu chuẩn (< 50000) bằng cách sử dụng SUM(CASE...). Ba cột: Department_id, cao, tiêu chuẩn. Đặt hàng theo bộ phận_id (NULLS CUỐI CÙNG).
Hiển thị gợi ý
Mẫu SUM(CASE WHEN ... THEN 1 ELSE 0 END) là số đếm có điều kiện.
Giải pháp khả dụng sau 3 lần thử