1. Giới thiệu
Hàm AVG() trong SQL được sử dụng để tính giá trị trung bình của một cột số trong bảng. Hàm này rất hữu ích khi bạn muốn tìm trung bình của một tập dữ liệu, chẳng hạn như trung bình lương của nhân viên, trung bình giá sản phẩm, hoặc trung bình doanh thu từ các đơn hàng.
Trong bài viết này, chúng ta sẽ tìm hiểu cú pháp và cách sử dụng AVG() trong SQL, cùng với các ví dụ thực tế và bảng dữ liệu giả định để bạn dễ dàng áp dụng trong các truy vấn MySQL.
2. Bảng dữ liệu giả định
Giả sử chúng ta có bảng employees với thông tin nhân viên bao gồm các cột: employee_id, first_name, last_name, department, salary, và age như sau:
| employee_id | first_name | last_name | department | salary | age |
|---|---|---|---|---|---|
| 1 | John | Doe | Sales | 1500000 | 35 |
| 2 | Jane | Smith | Marketing | 1700000 | 28 |
| 3 | Bob | Johnson | Sales | 1300000 | 40 |
| 4 | Alice | Brown | HR | 2000000 | 45 |
| 5 | Charlie | Green | Marketing | 1800000 | 25 |
3. SQL AVG() là gì?
Hàm AVG() trong SQL trả về giá trị trung bình của một tập hợp các giá trị số từ một cột cụ thể. Hàm này chỉ làm việc với các cột chứa dữ liệu kiểu số như INTEGER, FLOAT, hoặc DECIMAL.
Cú pháp tổng quát của SQL AVG():
SELECT AVG(column_name)
FROM table_name
WHERE condition;column_name: Tên của cột mà bạn muốn tính trung bình (phải là cột kiểu số).table_name: Tên của bảng chứa dữ liệu.condition: Điều kiện để lọc các bản ghi cần tính trung bình (tùy chọn).
4. Cách sử dụng SQL AVG()
a. Tính trung bình cho tất cả các bản ghi
Hàm AVG() thường được sử dụng để tính giá trị trung bình của một cột cho tất cả các bản ghi trong bảng.
Ví dụ 1: Tính trung bình lương của tất cả nhân viên
SELECT AVG(salary) AS avg_salary
FROM employees;Kết quả:
| avg_salary |
|---|
| 1660000 |
Câu lệnh này sẽ tính toán và trả về giá trị trung bình của cột salary trong bảng employees.
b. Sử dụng SQL AVG() với điều kiện WHERE
Bạn có thể kết hợp hàm AVG() với điều kiện WHERE để tính trung bình cho một tập hợp con của dữ liệu, chẳng hạn như tính trung bình lương của nhân viên trong một phòng ban cụ thể.
Ví dụ 2: Tính trung bình lương của nhân viên trong phòng ban "Sales"
SELECT AVG(salary) AS avg_sales_salary
FROM employees
WHERE department = 'Sales';Kết quả:
| avg_sales_salary |
|---|
| 1400000 |
Câu lệnh này sẽ trả về mức lương trung bình của nhân viên thuộc phòng ban "Sales".
c. Sử dụng SQL AVG() với dữ liệu kiểu ngày tháng
Bạn cũng có thể sử dụng AVG() với các dữ liệu liên quan đến ngày tháng, chẳng hạn như tính trung bình khoảng thời gian giữa các ngày hoặc các cột lưu trữ thời gian.
Ví dụ 3: Tính trung bình tuổi của nhân viên
SELECT AVG(age) AS avg_age
FROM employees;Kết quả:
| avg_age |
|---|
| 34.6 |
Câu lệnh này sẽ trả về tuổi trung bình của các nhân viên trong bảng employees.
d. Sử dụng SQL AVG() với nhóm dữ liệu (GROUP BY)
Hàm AVG() có thể kết hợp với câu lệnh GROUP BY để tính giá trị trung bình cho từng nhóm dữ liệu riêng biệt. Điều này hữu ích khi bạn muốn tính trung bình theo từng nhóm, chẳng hạn như tính trung bình lương của mỗi phòng ban.
Ví dụ 4: Tính trung bình lương của nhân viên trong từng phòng ban
SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department;Kết quả:
| department | avg_salary |
|---|---|
| Sales | 1400000 |
| Marketing | 1750000 |
| HR | 2000000 |
Câu lệnh này sẽ trả về mức lương trung bình của các nhân viên theo từng phòng ban trong bảng employees.
5. Các ví dụ về SQL AVG()
Ví dụ 1: Tính giá sản phẩm trung bình trong bảng products
Giả sử bạn có bảng products chứa các sản phẩm, bạn có thể tính giá trung bình của tất cả sản phẩm như sau:
SELECT AVG(price) AS avg_price
FROM products;Ví dụ 2: Tính giá sản phẩm trung bình trong danh mục "Electronics"
Bạn có thể kết hợp hàm AVG() với điều kiện WHERE để chỉ tính giá trung bình cho các sản phẩm thuộc danh mục "Electronics".
SELECT AVG(price) AS avg_electronics_price
FROM products
WHERE category = 'Electronics';Ví dụ 3: Tính trung bình doanh thu của các đơn hàng có tổng giá trị trên 5 triệu
Trong bảng orders, bạn có thể tính trung bình tổng giá trị của các đơn hàng có giá trị lớn hơn 5 triệu như sau:
SELECT AVG(total_amount) AS avg_high_value_orders
FROM orders
WHERE total_amount > 5000000;Ví dụ 4: Tính trung bình lương của nhân viên theo từng phòng ban
SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department;Ví dụ 5: Tính trung bình lương của nhân viên trong độ tuổi từ 30 đến 40
Bạn có thể sử dụng điều kiện WHERE để lọc các nhân viên trong độ tuổi từ 30 đến 40 và tính trung bình lương của họ:
SELECT AVG(salary) AS avg_salary
FROM employees
WHERE age BETWEEN 30 AND 40;6. Một số lưu ý khi sử dụng SQL AVG()
a. Xử lý giá trị NULL
- Hàm
AVG()sẽ bỏ qua các giá trịNULL. Điều này có nghĩa là nếu có bất kỳ bản ghi nào có giá trịNULLtrong cột được tính trung bình, các bản ghi đó sẽ không được tính vào kết quả trung bình. - Bạn có thể sử dụng điều kiện
WHEREhoặcIS NOT NULLđể loại bỏ các bản ghi có giá trịNULLtrước khi tính toán.
Ví dụ:
SELECT AVG(salary) AS avg_salary
FROM employees
WHERE salary IS NOT NULL;b. Kết hợp với các hàm tổng hợp khác
Bạn có thể kết hợp AVG() với các hàm tổng hợp khác như COUNT(), SUM(), MAX(), và MIN() để có được các kết quả phân tích toàn diện hơn.
Ví dụ:
SELECT department, COUNT(*) AS employee_count, AVG(salary) AS avg_salary
FROM employees
GROUP BY department;c. Tính trung bình trên dữ liệu nhóm
Khi kết hợp với GROUP BY, bạn có thể tính trung bình cho từng nhóm dữ liệu. Hãy đảm bảo rằng các nhóm dữ liệu được xác định rõ ràng để tránh kết quả không chính xác.
d. Hiệu suất khi làm việc với bảng lớn
Khi tính toán trung bình trên bảng lớn, việc sử dụng hàm AVG() có thể ảnh hưởng đến hiệu suất truy vấn. Bạn có thể sử dụng chỉ mục (index) để cải thiện hiệu suất cho các cột mà bạn thường xuyên sử dụng trong các phép tính tổng hợp.
Kết luận
Hàm AVG() trong SQL là một công cụ mạnh mẽ giúp bạn tính giá trị trung bình của các cột số. Bạn có thể áp dụng hàm này để phân tích dữ liệu từ nhiều góc độ khác nhau, chẳng hạn như tính trung bình lương của nhân viên, trung bình giá của sản phẩm, hoặc trung bình doanh thu từ các đơn hàng. Kết hợp với các hàm như COUNT(), SUM(), và GROUP BY, bạn có thể dễ dàng tạo ra các báo cáo phân tích dữ liệu hiệu quả.
Hãy thử áp dụng các ví dụ này vào các bài tập và dự án thực tế trên CodeTutHub để nắm vững hơn về cách sử dụng hàm AVG() trong SQL!









