Hướng dẫn having trong mysql
Tìm hiểu mệnh đề HAVING trong MySQL- Trong hệ quản trị cơ sở dữ liệu MySQL, mệnh đề HAVING thường được sử dụng thay thế cho mệnh đề WHERE khi điều kiện chọn lọc dữ liệu có nhắc đến các hàm tính toán tổng hợp như: COUNT, SUM, MIN, MAX, AVG, . . . . Show - Để sử dụng mệnh đề HAVING thì chúng ta dùng cú pháp như sau:
MỘT SỐ VÍ DỤ- Trong bài học này, tôi sẽ sử dụng cái bảng Customers như bên dưới để làm một số ví dụ minh họa.
- Liệt kê những thành phố có nhiều hơn hoặc bằng 2 khách hàng.
- Sau khi thực thi câu lệnh phía trên thì tôi sẽ lấy được một bảng dữ liệu như bên dưới:
- Liệt kê những thành phố có nhiều hơn hoặc bằng 2 khách hàng. (sắp xếp các thành phố theo thứ tự giảm dần của số lượng khách hàng)
- Sau khi thực thi câu lệnh phía trên thì tôi sẽ lấy được một bảng dữ liệu như bên dưới:
Mệnh đề HAVING trong SQL cho phép bạn chỉ định điều kiện lọc mà kết quả nhóm xuất hiện trong kết quả. Mệnh đề WHERE đặt các điều kiện vào các cột đã chọn, trong khi mệnh đề HAVING đặt các điều kiện vào các nhóm được tạo bởi mệnh đề GROUP BY. Cú phápCác Mã lệnh sau đây cho thấy vị trí của khoản HAVING trong một truy vấn. FROM WHERE GROUP BY HAVING ORDER BY Mệnh đề HAVING phải tuân theo mệnh đề GROUP BY trong truy vấn và cũng phải trước mệnh đề ORDER BY nếu sử dụng. Mã lệnh sau đây có cú pháp của câu lệnh SELECT bao gồm mệnh đề HAVING: SELECT column1, column2 FROM table1, table2 WHERE [ conditions ] GROUP BY column1, column2 HAVING [ conditions ] ORDER BY column1, column2 Ví dụGiả sử bảng CUSTOMERS có các bản ghi sau. +----+----------+-----+-----------+----------+ | ID | NAME | AGE | ADDRESS | SALARY | +----+----------+-----+-----------+----------+ | 1 | Ha Anh | 32 | Da Nang | 2000.00 | | 2 | Van Ha | 25 | Ha Noi | 1500.00 | | 3 | Vu Bang | 23 | Vinh | 2000.00 | | 4 | Thu Minh | 25 | Ha Noi | 6500.00 | | 5 | Hai An | 27 | Ha Noi | 8500.00 | | 6 | Hoang | 22 | Ha Noi | 4500.00 | | 7 | Binh | 24 | Ha Noi | 10000.00 | +----+----------+-----+-----------+----------+ Sau đây là một ví dụ, sẽ hiển thị một bản ghi cho một độ tuổi tương tự sẽ lớn hơn hoặc bằng 2. SELECT ID, NAME, AGE, ADDRESS, SALARY FROM CUSTOMERS GROUP BY age HAVING COUNT(age) >= 2; Điều này sẽ tạo ra kết quả sau: +----+----------+-----+-----------+----------+ | ID | NAME | AGE | ADDRESS | SALARY | +----+----------+-----+-----------+----------+ | 2 | Van Ha | 25 | Ha Noi | 1500.00 | +----+----------+-----+-----------+----------+ Nội dung chính
Mệnh đề GROUP BY là gì?Mệnh đề GROUP BY là một lệnh SQL được sử dụng để nhóm các hàng có cùng một giá trị. Nó thường được sử dụng trong câu lệnh SELECT. GROUP BY là mệnh đề tùy chọn và thường được sử dụng cùng với các hàm tổng hợp với mục đích tạo các báo cáo tóm tắt từ cơ sở dữ liệu. Hay nói cách khác, GROUP BY hỗ trợ tóm tắt dữ liệu từ cơ sở dữ liệu. Các câu truy vấn có chứa mệnh đề GROUP BY được gọi là các truy vấn nhóm và chỉ trả về một hàng cho mỗi mục được nhóm Cú pháp GROUP BYHãy cùng xem xét cú pháp của GROUP BY: Trong đó:
Ví dụ về GROUP BYPhân nhóm dựa trên một cộtĐể hiểu được ảnh hưởng của mệnh đề GROUP BY, trước tiên chúng ta thực hiện một truy vấn đơn giản là trả về tất cả các mục nhập giới tính từ bảng members: Giả sử rằng chúng ta muốn hiển thị một giá trị duy nhất cho mỗi loại giới tính, sử dụng câu truy vấn sau : Sau khi thực hiện câu truy vấn trên, kết quả sẽ trả về như sau: Lưu ý là chỉ có hai kết quả được trả lại bởi vì chúng ta chỉ có hai loại giới tính là Male và Female. Mệnh đề GROUP BY đã nhóm tất cả các thành viên “Male” lại với nhau và trả về một hàng duy nhất. Điều này cũng được thực hiện tương tự với tất cả thành viên là “Female”. Phân nhóm dựa trên nhiều cộtGiả sử rằng chúng ta muốn lấy danh sách ID của tất cả các thể loại phim và năm phát hành tương ứng của chúng từ bảng movies. Thực hiện câu truy vấn sau: Kết quả trên cho một số thông tin trùng lặp. Khi thực hiện câu truy vấn trên cùng với GROUP BY: GROUP BY hoạt động trên cả category_id và year_released để xác định hàng duy nhất trong ví dụ trên. Nếu category_id giống nhau nhưng year_released khác nhau, thì mỗi hàng được coi là một hàng chứa thông tin duy nhất. Nếu category_id và year_released giống nhau cho nhiều hơn một hàng thì nó được xem là trùng lặp và chỉ hiển thị một hàng trong kết quả. Phân nhóm với các hàm tổng hợpGiả sử chúng ta muốn biết tổng số nam và nữ trong cơ sở dữ liệu thì có thể thực hiện câu lệnh sau đây: Chạy câu lệnh trên cho ra kết quả: Kết quả trên được nhóm theo từ giá trị giới tính duy nhất và số lượng hàng trong nhóm được tính bằng hàm tổng hợp COUNT Giới hạn kết quả truy vấn bằng mệnh đề HAVINGKhông phải trong trường hợp nào chúng ta cũng muốn nhóm tất cả các dữ liệu trong cùng một bảng. Sẽ có lúc chúng ta muốn giới hạn kết quả của mình theo một tiêu chí nhất định. Trong những trường hợp như vậy, chúng ta có thể sử dụng mệnh đề HAVING. Giả sử rằng chúng ta muốn biết tất cả các năm phát hành cho một thể loại phim có ID là 8. Thực hiện câu lệnh sau: Kết quả được hiển thị: Lưu ý rằng ở đây chỉ những phim có category_id là 8 mới bị ảnh hưởng bởi mệnh đề GROUP BY. Kết luận
Các bạn có thể tham khảo thêm các bài viết khác về cách sử dụng MySQL: Hướng dẫn sử dụng câu lệnh SELECT trong MySQL qua các ví dụ Hướng dẫn câu lệnh DELETE trong MySQL và ví dụ minh họa Hướng dẫn câu lệnh UPDATE trong MySQL và các ví dụ Cùng tham gia cộng đồng hỏi đáp về chủ đề Góc chia sẻ |