Cách sử dụng CASE WHEN trong Oracle như thế nào
Trong Oracle SQL, câu lệnh CASE WHEN được sử dụng để thực hiện các điều kiện giống như câu lệnh IF...ELSE trong các ngôn ngữ lập trình. Đây là cú pháp giúp bạn xử lý các điều kiện logic trực tiếp trong truy vấn SQL.
✅ Cú pháp cơ bản#
CASE WHEN điều_kiện_1 THEN giá_trị_1 WHEN điều_kiện_2 THEN giá_trị_2 ... ELSE giá_trị_mặc_định END
🟢 Ví dụ 1: Gán hạng cho điểm số#
SELECT student_name, score, CASE WHEN score >= 90 THEN 'Xuất sắc' WHEN score >= 70 THEN 'Khá' WHEN score >= 50 THEN 'Trung bình' ELSE 'Yếu' END AS grade FROM students;
✅ CASE trong mệnh đề WHERE#
SELECT * FROM employees WHERE department_id = CASE WHEN job_id = 'IT_PROG' THEN 60 WHEN job_id = 'HR_REP' THEN 40 ELSE department_id END;
✅ CASE trong mệnh đề ORDER BY#
SELECT employee_name, job_id FROM employees ORDER BY CASE WHEN job_id = 'MANAGER' THEN 1 WHEN job_id = 'CLERK' THEN 2 ELSE 3 END;
✅ Cú pháp dạng CASE đơn giản (sử dụng biểu thức so sánh)#
CASE biểu_thức WHEN giá_trị_1 THEN kết_quả_1 WHEN giá_trị_2 THEN kết_quả_2 ... ELSE kết_quả_mặc_định END
🟢 Ví dụ 2: Kiểm tra loại sản phẩm#
SELECT product_name, category_id, CASE category_id WHEN 1 THEN 'Điện tử' WHEN 2 THEN 'Gia dụng' WHEN 3 THEN 'Thời trang' ELSE 'Khác' END AS category_name FROM products;
✅ Lưu ý#
CASEcó thể dùng ở bất kỳ đâu trong câu SQL:SELECT,WHERE,ORDER BY,GROUP BY, thậm chí trongUPDATEvàINSERT.Oracle hỗ trợ cả
Searched CASE(điều kiện linh hoạt) vàSimple CASE(so sánh biểu thức với giá trị cụ thể).
Trong Oracle SQL, bạn có thể kết hợp CASE WHEN với hàm COUNT để đếm có điều kiện — tức là chỉ đếm những dòng thỏa mãn điều kiện cụ thể.
✅ Cú pháp đếm có điều kiện với COUNT(CASE WHEN ...)#
SELECT COUNT(CASE WHEN điều_kiện THEN 1 END) AS ten_cot FROM ten_bang;
🟢 Ví dụ 1: Đếm số sinh viên theo từng hạng điểm#
Giả sử bạn có bảng students(score):
SELECT COUNT(CASE WHEN score >= 90 THEN 1 END) AS xuat_sac, COUNT(CASE WHEN score >= 70 AND score < 90 THEN 1 END) AS kha, COUNT(CASE WHEN score >= 50 AND score < 70 THEN 1 END) AS trung_binh, COUNT(CASE WHEN score < 50 THEN 1 END) AS yeu FROM students;
🟢 Ví dụ 2: Đếm số nhân viên theo giới tính trong từng phòng ban#
Giả sử bảng employees(department_id, gender):
SELECT department_id, COUNT(CASE WHEN gender = 'M' THEN 1 END) AS nam, COUNT(CASE WHEN gender = 'F' THEN 1 END) AS nu FROM employees GROUP BY department_id;
🟢 Ví dụ 3: Đếm số đơn hàng theo trạng thái#
Giả sử bảng orders(status) có các giá trị: 'NEW', 'SHIPPED', 'CANCELLED'
SELECT COUNT(CASE WHEN status = 'NEW' THEN 1 END) AS don_moi, COUNT(CASE WHEN status = 'SHIPPED' THEN 1 END) AS da_giao, COUNT(CASE WHEN status = 'CANCELLED' THEN 1 END) AS da_huy FROM orders;
✅ Ghi nhớ:#
COUNT(CASE WHEN ... THEN 1 END)đếm số bản ghi thỏa mãn điều kiện.Không nên dùng
COUNT(CASE WHEN ... THEN 'text' END)nếu có khả năng giá trị làNULL, vìCOUNTkhông đếmNULL.
2 phản hồi
Bài liên quan trong #Oracle
-
Xử lý Deadlock trong Oracle – Nguyên nhân, cách phát hiện và giải pháp hiệu quả
minhdev -
Oracle hỗ trợ Container Database ra sao?
minhdev -
Oracle hỗ trợ AI/ML - Công nghệ AI và Machine Learning của Oracle Database
minhdev -
Các xu hướng mới trong Oracle Database: Cập nhật xu hướng công nghệ 2025
minhdev -
Quản lý Oracle Instance bằng SQL*Plus
minhu