Hàm AVG() trong MySQL

Hàm AVG() trong MySQL
Hàm AVG() trong MySQL

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 BYHAVING để 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
Trần Thị Vân | Content Creator Web Mới
Trần Thị Vân
Trần Thị Vân là Content Creator tại Web Mới, phụ trách nghiên cứu, biên soạn nội dung và chia sẻ kiến thức về website, SEO, lập trình cùng các xu hướng công nghệ
Đánh giá
Chia sẻ nội dung đánh giá của bạn về Hàm AVG() trong MySQL
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 *
Đánh giá của bạn
Tên *
Email
Số điện thoại *
Bình luận, Hỏi đáp
Yêu Cầu Báo Giá
Gửi trang web mẫu cần làm theo, chúng tôi sẽ báo giá đến bạn từ Email (tanlucit09@gmail.com - Bùi Tấn Lực) hoặc Zalo (Lực IT - 0398259259) !