Chủ Nhật, 19 Tháng Năm 2024
Trang chủPHP & MysqlMySQLMệnh đề HAVING trong MySQL - Đặt đk sau các hàm tổng...

Mệnh đề HAVING trong MySQL – Đặt đk sau các hàm tổng hợp

Mệnh đề HAVING cũng là một mệnh đề điều kiện có sự giống nhau với mệnh đề WHERE, tuy nhiên cách sử dụng thì lại rất khác nhau.

DANH SÁCH BÀI VIẾT
Mệnh đề LIMIT & OFFSET trong MySQL - Giới hạn bản ghi
Mệnh đề HAVING trong MySQL - Đặt đk sau các hàm tổng hợp
Mệnh đề ORDER BY trong MySQL - Mệnh đề sắp xếp bản ghi
Mệnh đề GROUP BY trong MySQL - Mệnh đề nhóm dữ liệu bản ghi
Tìm hiểu Mệnh đề WHERE IN, WHERE NOT IN trong MySQL

Trong bài viết trước chúng ta đã tìm hiểu về mệnh đề GROUP BY, với mệnh đề WHERE chỉ có thể đặt điều kiện đối với các thuộc tính(cột) vốn có của bảng, các thuộc tính được tạo sau khi trả kết quả đối chiếu cho các nhóm (Sum, Count, Average,…) được tạo bởi Group by thì không thể sử dụng WHERE đặt điều kiện đối với những thuộc tính này. Vậy trong bài viết này chúng ta sẽ tìm hiểu về mệnh đề HAVING, cách áp dụng mệnh đề HAVING.

Mệnh đề điều kiện HAVING

Mệnh đề HAVING được sử dụng để lọc các kết quả, nó tương tự như WHERE, nhưng được sử dụng để lọc các giá trị được tính toán sau khi GROUP BY được áp dụng.

Cú pháp mệnh đề HAVING

SELECT column_name
FROM table_name
WHERE condition
GROUP BY column_name
HAVING condition

Trong đó:

  • column_name(s) là các cột được chọn để truy vấn.
  • table_name là tên bảng được truy vấn.
  • condition là các điều kiện để lọc dữ liệu. Nó có thể được sử dụng với các phép so sánh như =, <>, <, >, <=, >= và các từ khóa logic như AND và OR.
  • GROUP BY column_name(s) được sử dụng để nhóm kết quả theo một hoặc nhiều cột.
  • HAVING condition: Cũng là để lọc theo điều kiện, nhưng thực hiện với các thuộc tính sau khi Group by được áp dụng.

*Cú pháp mệnh đề HAVING sẽ luôn nằm sau mệnh đề GROUP BY, còn WHERE sẽ luôn phải đứng trước GROUP BY*

>>Xem thêm: Mệnh đề GROUP BY trong MySQL – Hướng dẫn và ví dụ sử dụng

Ví dụ sử dụng

Mình có bảng users lưu thông tin người dùng như bên dưới đây.

Tìm hiểu mệnh đề HAVING trong MySQL - Mệnh đề điều kiện

Trong bảng này, role tương ứng với các chức vụ 1 – admin, 2-manage, 3-user…và cột salary là mức lương của từng người dùng.

Bây giờ mình sẽ tính trung bình mức lương của mỗi nhóm vai trò bằng cách nhóm các nhóm role lại với mệnh đề Group by, và sau đó tính mức lương trung bình của từng nhóm bằng hàm AVG. Có thể viết câu lệnh SQL đầy đủ như sau.

SELECT role, AVG(salary) as avg_salary
FROM `users`
GROUP BY role

Kết quả thực hiện

Kết quả thực hiện câu lệnh

Như vậy, có thể thấy mức lương trung bình các nhóm người dùng với nhóm role 1 lương trung bình là 6tr5, role 25tr4, và role 33tr750k.

Vậy bây giờ hãy thử sử dụng mệnh đề where đặt điều kiện để lấy các nhóm user có mức lương trung bình là trên 5tr nhé.

SELECT role, AVG(salary) as avg_salary
FROM `users`
WHERE avg_salary > 5000000
GROUP BY role

Lúc này chương trình sẽ báo lỗi như sau:

áp dụng where sẽ sảy ra lỗi với các thuộc tính sau group by được áp dụng

Lỗi không thể tìm thấy cột avg_salary, vì cột này được tạo sau khi mệnh đề GROUP BY được áp dụng nên mệnh đề where không được áp dụng trong trường hợp này.

Vậy để khác phục lỗi trên thay mệnh đề WHERE bằng mệnh đề HAVING.

SELECT role, AVG(salary) as avg_salary
FROM `users`
GROUP BY role
HAVING avg_salary > 5000000

Kết quả khi thực hiện câu lệnh sử dụng mệnh đề HAVING

kết quả Ví dụ mệnh đề group by

Chúng ta có thể thấy role 3 vì có mức lương trung bình nhỏ hơn 5 triệu nên đã bị loại bỏ.

>>Xem thêm: Mệnh đề WHERE trong MySQL – Mệnh đề điều kiện

Tóm lại, mệnh đề HAVING được sử dụng với các thuộc tính được tạo sau khi câu lệnh GROUP BY được áp dụng, mệnh đề where được sử dụng với các thuộc tính vốn có của bảng dữ liệu.

Cảm ơn bạn đã đọc hết bài viết! Chúc bạn học tốt!

[XEM CÁC BÀI VIẾT CHUYÊN ĐỀ HỌC MYSQL CƠ BẢN TẠI ĐÂY]

XEM THÊM
Câu lệnh INSERT INTO trong MySQL – Lệnh chèn dữ liệu vào bảng
Câu lệnh CREATE TABLE trong MySQL – Lệnh tạo bảng mới
Các kiểu dữ liệu trong MySQL (Data Types) – Học MySQL
Câu lệnh SELECT trong MySQL – Khi nào thì dùng lệnh SELECT
Mệnh đề FROM trong MySQL – truy vấn từ bảng nào
Mệnh đề ORDER BY trong MySQL – Hướng dẫn và ví dụ áp dụng
Mệnh đề GROUP BY trong MySQL – Hướng dẫn và ví dụ sử dụng
0 0 Phiếu bình chọn
Xếp hạng bài viết
BÀI VIẾT LIÊN QUAN
Đăng ký nhận thông báo
Thông báo email khi
guest
0 Bình luận
Không thể gửi email
Phản hồi nội tuyến

NÊN ĐỌC THÊM

Bạn muốn tìm kiếm gì?

Dịch vụ code thuê

TUICOCACH.COM NHẬN ĐẶT TEXTLINK, BANNER, GP
0
Giáo sư! có thể ném gạch bên dưới nhé!x