SQL có nhiều loại operation truy vấn database. Mệnh đề HAVING hoạt động như subquery trên query ban đầu. Hữu ích khi có lượng entry lớn cùng một giá trị và muốn lọc thêm. Bài viết xem cách hoạt động.
Chuẩn bị
SQL Fiddle dùng MySQL, schema mẫu:
create table Cars ( id INT PRIMARY KEY, year VARCHAR(50), car_make VARCHAR(50), car_model VARCHAR(50) );
Tạo bảng "Cars" với schema make/model/year. Insert dữ liệu:
insert into Cars (id, year, car_make, car_model) values (1, 2011, 'Mazda', 'Miata MX-5'); insert into Cars (id, year, car_make, car_model) values (2, 1969, 'Ford', 'Mustang'); ... (tổng 25 record)
Muốn mock data riêng, dùng mockaroo.com – setup schema đơn giản.
Cách dùng HAVING
SELECT COUNT(id), car_make FROM Cars GROUP BY car_make HAVING COUNT(id) > 0;
Dùng HAVING khi cần aggregate function mà WHERE không dùng được. Aggregate function: thực hiện operation trả về giá trị đơn – COUNT, AVG, SUM. Code trên trả về:
| COUNT(id) | car_make |
|---|---|
| 1 | Audi |
| 1 | BMW |
| 1 | Buick |
| 3 | Chevrolet |
| 3 | Ford |
| 1 | Honda |
| 1 | Hyundai |
| 3 | Jeep |
| 1 | Kia |
| 1 | Lamborghini |
| 1 | Maserati |
| 1 | Mazda |
| 1 | Mercedes-Benz |
| 1 | Oldsmobile |
| 1 | Pontiac |
| 1 | Porsche |
| 1 | Saturn |
| 1 | Suzuki |
| 1 | Toyota |
Dùng SELECT lấy COUNT car_make tồn tại, GROUP BY tách theo car_make.
Đó là tất cả về HAVING! Nhắc lại: mệnh đề HAVING trong query SQL là subfilter dùng aggregate function thực hiện query bổ sung trên database. Thử aggregate function khác để hiểu sâu hơn!