Hàm AVG() trong MySQL
Trần Thị Vân
- 1122
- 15/08/2025
Chức năng của Hàm AVG() trong MySQL
Hàm AVG() trong MySQL được sử dụng để tính giá trị trung bình trong một cột, hàm AVG() sẽ kết với từ khóa AS để tạo bí danh cho một giá trị, giúp cho việc lấy dữ liệu tiện lợi hơn, hàm AVG() thường được dùng kết hợp với mệnh đề GROUP BY để lấy giá trị trung bình của một cột trong từng nhóm.
Code Hàm AVG() trong MySQL
select AVG(gia) as giatrungbinh from tb_sanpham;
select id_cha1,AVG(gia) as giatrungbinh from tb_sanpham where hienthi=1 GROUP BY id_cha1
<?php
$dbhost = 'localhost';
$dbuser = 'webmoi_userdata'; // Tên username
$dbpass = 'xgZwEfQWE'; // Mật khẩu
// Kết nối đến tên username
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn ){
die('Không kết nối được: ' . mysql_error());
}
// Chọn tên database
mysql_select_db('webmoi_tendata');
// Xét kiểu tiếng việt
mysql_query('SET NAMES "utf8"');
// AVG(gia)
echo "<b>AVG(gia)</b><br>";
$sql ="select AVG(gia) as giatrungbinh from tb_sanpham";
$ketquamot = mysql_query($sql,$conn);
if(!$ketquamot){
die('Không thể lấy dữ liệu: ' . mysql_error());
}
$giatrungbinhct = mysql_fetch_array($ketquamot, MYSQL_ASSOC);
echo "Giá trung bình: ".number_format($giatrungbinhct['giatrungbinh'],0,"",".")."<br>";
// AVG(gia) trong GROUP BY id_cha1
echo "<b>AVG(gia) trong GROUP BY id_cha1</b><br>";
$sql ="select id_cha1,AVG(gia) as giatrungbinh from tb_sanpham where hienthi=1 GROUP BY id_cha1";
$ketquahai = mysql_query($sql,$conn);
if(!$ketquahai){
die('Không thể lấy dữ liệu: ' . mysql_error());
}
// Dùng vòng lặp để lấy ra từng hàng trong bảng
while($row = mysql_fetch_array($ketquahai, MYSQL_ASSOC)){
echo "ID Cha cấp một: {$row['id_cha1']} <br> ".
"Giá trung bình: ".number_format($row['giatrungbinh'],0,"",".")." <br> ".
"--------------------------------<br>";
}
// Đóng kết nối database
mysql_close($conn);
?>
Kết quả:
AVG(gia)
Giá trung bình: 26.775.000
AVG(gia) trong GROUP BY id_cha1
ID Cha cấp một: 1
Giá trung bình: 38.637.500
--------------------------------
ID Cha cấp một: 2
Giá trung bình: 3.050.000
--------------------------------
Những lưu ý khi sử dụng Hàm AVG() trong MySQL
Khi sử dụng AVG(), kết quả không chỉ phụ thuộc vào các giá trị được tính mà còn chịu ảnh hưởng bởi cách lọc, nhóm và xử lý dữ liệu. Nắm rõ một số lưu ý dưới đây sẽ giúp hạn chế kết quả sai khi làm việc với bảng có nhiều dữ liệu.
Hàm AVG() xử lý giá trị NULL như thế nào?
AVG() không tính các giá trị NULL vào tổng số phần tử dùng để tính trung bình. Vì vậy, nếu một cột có cả số và NULL, MySQL chỉ lấy các giá trị số hợp lệ để tính.
SELECT AVG(diem) AS diem_trung_binh
FROM sinh_vien;
Ví dụ cột diem có các giá trị 7, 8, NULL và 9 thì kết quả được tính từ 7, 8 và 9, không chia tổng cho 4 dòng. Đây là điểm cần lưu ý khi dữ liệu có thể chứa giá trị chưa được nhập.
Sử dụng AVG() với DISTINCT
Có thể kết hợp AVG() với DISTINCT khi muốn loại bỏ các giá trị trùng nhau trước khi tính trung bình. Cách này phù hợp khi bài toán yêu cầu tính trung bình dựa trên các mức giá trị duy nhất.
SELECT AVG(DISTINCT diem) AS diem_trung_binh
FROM sinh_vien;
Khác với AVG(diem), biểu thức trên chỉ lấy mỗi giá trị điểm một lần. Do đó, kết quả có thể khác đáng kể nếu một giá trị xuất hiện nhiều lần trong bảng.
Kết hợp AVG() với WHERE, GROUP BY và HAVING
AVG() thường được kết hợp với WHERE, GROUP BY và HAVING để tạo các truy vấn thống kê thực tế. WHERE dùng để lọc dữ liệu trước khi tính, GROUP BY chia dữ liệu thành từng nhóm, còn HAVING lọc kết quả sau khi đã gom nhóm.
SELECT phong_ban, AVG(luong) AS luong_trung_binh
FROM nhan_vien
WHERE luong > 5000000
GROUP BY phong_ban
HAVING AVG(luong) >= 10000000;
Trong ví dụ trên, MySQL trước tiên loại các nhân viên có lương không vượt quá 5 triệu. Sau đó dữ liệu được chia theo phòng ban, tính mức lương trung bình cho từng nhóm và chỉ giữ lại những phòng ban có mức trung bình từ 10 triệu trở lên.
Cách xử lý khi AVG() không có dữ liệu
Nếu không có giá trị phù hợp để tính trung bình, AVG() có thể trả về NULL. Điều này thường xảy ra khi truy vấn không tìm thấy dòng dữ liệu hoặc tất cả giá trị của cột đều là NULL.
SELECT AVG(luong) AS luong_trung_binh
FROM nhan_vien
WHERE phong_ban = 'KhongTonTai';
Nếu muốn hiển thị một giá trị mặc định thay cho NULL, có thể kết hợp AVG() với COALESCE().
SELECT COALESCE(AVG(luong), 0) AS luong_trung_binh
FROM nhan_vien
WHERE phong_ban = 'KhongTonTai';
Cách này giúp kết quả dễ sử dụng hơn khi đưa vào báo cáo, bảng thống kê hoặc xử lý tiếp trong ứng dụng.
Lời kết
Cảm ơn các bạn đã tham khảo bài viết Hàm AVG() trong MySQL.
Tải file database .sql về nếu muốn kiểm tra hoặc thực hành Tải về.
- 0 Bình luận
Email, Điện thoại của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *