Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Dùng HAVING và AVG() để tìm trung bình của các phần tử trùng lặp trong MySQL

Khi lọc sau khi gom nhóm (GROUP BY), dùng HAVING thay vì WHERE.

Ví dụ minh họa

Tạo bảng (có trùng tên với điểm khác nhau):

mysql> CREATE TABLE DemoTable1338 (Name VARCHAR(10), Score INT);
mysql> INSERT INTO DemoTable1338 VALUES('Chris', 8), ('Bob', 4), ('Bob', 9), ('Chris', 6), ('David', 5), ('David', 7);

Xem dữ liệu:

mysql> SELECT * FROM DemoTable1338;
+-------+-------+
| Name  | Score |
+-------+-------+
| Chris | 8     |
| Bob   | 4     |
| Bob   | 9     |
| Chris | 6     |
| David | 5     |
| David | 7     |
+-------+-------+

Tìm trung bình điểm theo tên, chỉ giữ nhóm có trung bình < 9.5, sắp xếp tăng dần:

mysql> SELECT Name, AVG(Score) FROM DemoTable1338
    GROUP BY Name
    HAVING AVG(Score) < 9.5
    ORDER BY AVG(Score);

Kết quả:

+-------+------------+
| Name  | avg(Score) |
+-------+------------+
| David | 6.0000     |
| Bob   | 6.5000     |
| Chris | 7.0000     |
+-------+------------+

Quy tắc:

  • WHERE: lọc hàng trước GROUP BY.
  • HAVING: lọc nhóm sau GROUP BY (có thể dùng hàm tập hợp: AVG, SUM, COUNT...).
  • Alias cột trong SELECT không dùng được trong HAVING ở một số phiên bản MySQL cũ - hãy lặp lại biểu thức AVG(Score).