SQLite avg()
hàm trả về giá trị trung bình của tất cả các giá trị không phải NULL trong một nhóm.
Nó chấp nhận một đối số, đó là giá trị hoặc nhóm giá trị.
Ví dụ
Lấy bảng sau:
ProductId ProductName Price ---------- --------------------- ---------- 1 Blue Widgets (6 Pack) 389.45 2 Widget Holder 139.5 3 Widget Opener 89.27 4 Foobar Set 120.0
Chúng ta có thể sử dụng avg()
để nhận giá trị trung bình từ Giá cột. Như thế này:
SELECT avg(Price) FROM Products;
Kết quả:
184.555
Mệnh đề WHERE ảnh hưởng đến kết quả như thế nào
Nếu truy vấn của bạn sử dụng WHERE
, giá trị trung bình sẽ được tính sau WHERE
điều khoản đã có ảnh hưởng. Nói cách khác, bạn có thể sử dụng WHERE
để đảm bảo rằng avg()
hàm chỉ tính những hàng mà bạn quan tâm.
Đây là điều sẽ xảy ra nếu tôi thêm WHERE
mệnh đề cho ví dụ trước.
SELECT avg(Price)
FROM Products
WHERE ProductName LIKE '%widget%';
Kết quả:
206.073333333333
Làm tròn kết quả
Kết quả được trả về dưới dạng giá trị dấu phẩy động (trừ khi nó là NULL). Bạn có thể sử dụng round()
hàm để làm tròn giá trị theo yêu cầu.
SELECT round(avg(Price), 2)
FROM Products
WHERE ProductName LIKE '%widget%';
Kết quả:
206.07
Giới hạn kết quả
LIMIT
mệnh đề không ảnh hưởng đến việc tính toán avg()
hàm - chỉ một hàng được trả về với avg()
vẫn hoạt động.
SELECT avg(Price)
FROM Products
LIMIT 1;
Kết quả:
184.555
Điều đó nói rằng, việc cung cấp giới hạn bằng 0 sẽ dẫn đến không có gì được trả lại.
Chuỗi và BLOB
Các giá trị chuỗi và BLOB không giống số được hiểu là 0.
SELECT avg(ProductName) FROM Products;
Kết quả:
0.0
Đối số NULL
Nếu không có đầu vào không phải NULL, hàm avg () trả về NULL.
SELECT avg(NULL);
Kết quả:
(Kết quả đó là NULL).
Tuy nhiên, nếu có ít nhất một đối số không phải NULL thì đối số đó sẽ không trả về NULL.
Để chứng minh điều này, ở đây tôi sẽ chèn một hàng mới nhưng để nguyên Giá cột tại NULL:
INSERT INTO Products (ProductId, ProductName)
VALUES (5, 'Red Widget');
SELECT * FROM Products;
Kết quả:
ProductId ProductName Price ---------- --------------------- ---------- 1 Blue Widgets (6 Pack) 389.45 2 Widget Holder 139.5 3 Widget Opener 89.27 4 Foobar Set 120.0 5 Red Widget
Vì vậy, hàng cuối cùng không có giá - Giá cột là NULL.
Bây giờ khi tôi sử dụng avg()
, nó vẫn trả về giá trị trung bình của tất cả các hàng không phải NULL.
SELECT avg(Price) FROM Products;
Kết quả:
184.555
Từ khóa DISTINCT
Bạn có thể sử dụng DISTINCT
từ khóa để chỉ tính giá trị trung bình của các giá trị riêng biệt trong cột. Điều này có tác dụng loại bỏ mọi giá trị trùng lặp khỏi phép tính.
Xem Chỉnh sửa kết quả trung bình () của bạn trong SQLite với Từ khóa DISTINCT để làm ví dụ.