Thứ tự xử lý · GROUP BY · HAVING

Câu SELECT được viết một kiểu, chạy một kiểu

Thứ tự thực thi logic của câu SELECT có GROUP BY Truy vấn đếm đơn mỗi khách trên bảng orders được viết SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY nhưng database xử lý FROM (40 dòng), WHERE status <> 'cancelled' (37 dòng), GROUP BY customer_id (16 nhóm), HAVING COUNT(*) >= 3 (4 nhóm), SELECT rồi ORDER BY; vì vậy WHERE không lọc được hàm tổng hợp còn HAVING thì được. THỨ TỰ VIẾT TRONG CÂU LỆNH SELECT 5 FROM 1 WHERE 2 GROUP BY 3 HAVING 4 ORDER BY 6 ← số = bước thực thi bên dưới THỨ TỰ DATABASE THỰC SỰ XỬ LÝ TRƯỚC KHI NHÓM · TỪNG DÒNG SAU KHI NHÓM · TỪNG NHÓM 1 FROM lấy bảng nguồn orders 40 dòng 2 WHERE lọc từng dòng status <> 'cancelled' còn 37 dòng 3 GROUP BY gom thành nhóm customer_id 16 nhóm 4 HAVING lọc từng nhóm COUNT(*) >= 3 còn 4 nhóm 5 SELECT tính cột, đặt tên AS so_don 4 dòng 6 ORDER BY sắp xếp kết quả so_don DESC 4 dòng WHERE chạy khi chưa có nhóm, nên không lọc được SUM(), COUNT() HAVING chạy sau GROUP BY, nên lọc được theo hàm tổng hợp © tiennhm