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