Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Mệnh đề HAVING với GROUP BY trong MySQL

Tóm tắt

HAVING lọc **sau khi GROUP BY**, thường dùng với hàm aggregate (MAX, MIN, COUNT, SUM...). Khác với WHERE lọc trước khi nhóm.

Cú pháp

SELECT cot_nhom
FROM bang
GROUP BY cot_nhom
HAVING MAX(cot_nhom) < gia_tri;

Ví dụ

1. Tạo bảng

CREATE TABLE WhereAfterGroupDemo (
    UserId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    UserProcess INT,
    UserThreadId INT
);

2. Dữ liệu

INSERT INTO WhereAfterGroupDemo (UserProcess, UserThreadId) VALUES
(1211, 3), (1412, 3), (1510, 4), (1511, 4);

3. Truy vấn: Lấy UserThreadId có MAX(UserProcess) < 1510

SELECT UserThreadId
FROM WhereAfterGroupDemo
GROUP BY UserThreadId
HAVING MAX(UserProcess) < 1510;

4. Kết quả

+--------------+
| UserThreadId |
+--------------+
| 3            |

Giải thích: Thread 3 có Process max = 1412 < 1510. Thread 4 có max = 1511 ≥ 1510 → bị loại.

WHERE vs HAVING

Đặc điểmWHEREHAVING
Lọc khi nàoTrước GROUP BYSau GROUP BY
Dùng aggregateKhôngCó
Dùng alias cộtKhông (trong một số DB)Có

Mẹo

  • Đặt điều kiện không aggregate vào WHERE để giảm hàng trước khi nhóm – nhanh hơn.
  • Chỉ dùng HAVING cho điều kiện có aggregate.