HAVING

Điều kiện với HAVING

Câu lệnh HAVING là biểu thức điều kiện tương tự WHERE nhưng được dùng cho câu lệnh với GROUP BY.
Câu lệnh HAVING thường được dùng với các hàm tập hợp (hàm AVG(), COUNT(), MAX()…).

Ví dụ sau tìm lớp nào có điểm trung bình lớn hơn 8.5 điểm:

1
2
3
4
SELECT AVG(score), class_name
  FROM students 
  GROUP BY class_name
  HAVING AVG(score) > 8.5;
Kết quả sẽ in ra (số thực lấy gần đúng trên MySQL):
+-------------------+------------+
| AVG(score)        | class_name |
+-------------------+------------+
| 8.650000095367432 | 5B         |
+-------------------+------------+

Điều kiện của GROUP BY với WHERE

Ví dụ sau chúng ta sẽ lấy các học sinh có điểm lớn hơn hoặc bằng 8.0. Tiếp theo chúng ta sẽ nhóm các học sinh theo lớp và tính điểm trung bình của các học sinh này.

1
2
3
4
SELECT AVG(score), class_name
  FROM students
  WHERE score >= 8.0
  GROUP BY class_name;
Kết quả sẽ là (số thực lấy gần đúng trên MySQL):
+-------------------+------------+
| AVG(score)        | class_name |
+-------------------+------------+
| 8.599999904632568 | 5A         |
|               9.5 | 5B         |
+-------------------+------------+

Ở ví dụ trên, nếu chúng ta muốn lấy điểm trung bình của lớp mà có điểm trung bình lớn hơn 9.0 thì sẽ là:

1
2
3
4
5
SELECT AVG(score), class_name
  FROM students 
  WHERE score >= 8.0 
  GROUP BY class_name
  HAVING AVG(score) > 9.0;
Kết quả sẽ là:
+------------+------------+
| AVG(score) | class_name |
+------------+------------+
|        9.5 | 5B         |
+------------+------------+