GROUP BY

GROUP BY

Để lấy dữ liệu gộp chung theo một nhóm chúng ta sử dụng từ khóa GROUP BY.

Ví dụ khi muốn lấy tên lớp.

1
2
3
SELECT class_name 
  FROM students 
  GROUP BY class_name;
Dữ liệu sẽ in ra:
+------------+
| class_name |
+------------+
| 5A         |
| 5B         |
+------------+

Sử dụng các hàm COUNT, MAX, MIN, AVG

Chúng ta cũng có thể sử dụng các hàm COUNT(), MAX(), MIN(), AVG() với GROUP BY. Các hàm này gọi là hàm tập hợp (aggregate function).
Ví dụ muốn lấy điểm lớn nhất, điểm thấp nhất và điểm trung bình của từng lớp:

1
2
3
SELECT MAX(score), MIN(score), AVG(score), class_name
  FROM students
  GROUP BY class_name;
Kết quả là (số thực lấy gần đúng với MySQL).
+------------+------------+-------------------+------------+
| MAX(score) | MIN(score) | AVG(score)        | class_name |
+------------+------------+-------------------+------------+
|        8.9 |        7.6 | 8.266666571299234 | 5A         |
|        9.5 |        7.8 | 8.650000095367432 | 5B         |
+------------+------------+-------------------+------------+

Sắp xếp với ORDER BY

Để sắp xếp giá trị trả về với GROUP BY thì chúng ta sử dụng ORDER BY.

Ví dụ sau sắp xếp điểm số trung bình của từng lớp theo thứ tự cao đến thấp.

1
2
3
4
SELECT MAX(score), MIN(score), AVG(score), class_name
  FROM students 
  GROUP BY class_name 
  ORDER BY AVG(score) DESC;
Kết quả là (số thực lấy gần đúng với MySQL).
+------------+------------+-------------------+------------+
| MAX(score) | MIN(score) | AVG(score)        | class_name |
+------------+------------+-------------------+------------+
|        9.5 |        7.8 | 8.650000095367432 | 5B         |
|        8.9 |        7.6 | 8.266666571299234 | 5A         |
+------------+------------+-------------------+------------+