Khi một sản phẩm (ProductId) xuất hiện nhiều lần với giá khác nhau, dùng AVG() kết hợp GROUP BY để tính giá trung bình cho mỗi mã sản phẩm.
Cú pháp
SELECT ProductId, AVG(ProductPrice) AS AveragePrice FROM ten_bang GROUP BY ProductId;
Ví dụ minh họa
Tạo bảng giá sản phẩm:
mysql> CREATE TABLE DemoTable1490 (
-> ProductId VARCHAR(20),
-> ProductPrice INT
-> );
Chèn dữ liệu (PRODUCT_100 và PRODUCT_200 xuất hiện nhiều lần):
mysql> INSERT INTO DemoTable1490 VALUES
-> ('PRODUCT_100', 700),
-> ('PRODUCT_200', 500),
-> ('PRODUCT_200', 1000),
-> ('PRODUCT_100', 1300),
-> ('PRODUCT_200', 300);
Truy vấn giá trung bình theo ProductId:
mysql> SELECT ProductId, AVG(ProductPrice)
-> FROM DemoTable1490
-> GROUP BY ProductId;
Kết quả:
+-------------+-------------------+ | ProductId | AVG(ProductPrice) | +-------------+-------------------+ | PRODUCT_100 | 1000.0000 | | PRODUCT_200 | 600.0000 | +-------------+-------------------+
Giải thích: PRODUCT_100: (700+1300)/2 = 1000. PRODUCT_200: (500+1000+300)/3 = 600.
Mở rộng
- Làm tròn:
ROUND(AVG(ProductPrice), 2). - Thêm điều kiện:
HAVING AVG(ProductPrice) > 500. - Đếm số lần xuất hiện:
COUNT(*) AS frequency. - Index trên
ProductIdsẽ tăng tốc GROUP BY trên bảng lớn.