Nếu bạn biết về avg()
trong SQLite, bạn có thể biết rằng nó trả về giá trị trung bình của tất cả các hàm không NULL X trong một nhóm.
Nhưng bạn có biết rằng bạn có thể thêm DISTINCT
từ khóa cho chức năng này?
Nếu bạn thêm DISTINCT
từ khóa, avg()
sẽ tính toán kết quả của nó chỉ dựa trên các giá trị riêng biệt. Điều này về cơ bản giống như việc loại bỏ các giá trị trùng lặp và sau đó tính giá trị trung bình cho các giá trị còn lại.
Cú pháp
Để sử dụng DISTINCT
từ khóa, bạn chỉ cần chèn nó làm đối số đầu tiên.
Như thế này:
avg(DISTINCT X)
Ở đâu X
là tên cột mà bạn đang tính giá trị trung bình.
Ví dụ
Lấy bảng sau được gọi là Products
:
ProductId ProductName Price ---------- ------------- ---------- 1 Widget Holder 139.5 2 Blue Widget 10.0 3 Red Widget 10.0 4 Green Widget 10.0 5 Widget Stick 89.75 6 Foo Cap 11.99
Nếu tôi chạy avg()
bình thường trên cột Giá:
SELECT avg(Price) FROM Products;
Đây là những gì tôi nhận được:
45.2066666666667
Nhưng nếu tôi chạy DISTINCT
truy vấn:
SELECT avg(DISTINCT Price) FROM Products;
Tôi nhận được cái này:
62.81
Vì vậy, trong trường hợp này, nó thay đổi kết quả khá đáng kể.
Nói rõ hơn, ở đây chúng ở cạnh nhau:
SELECT
avg(Price) AS "Non-Distinct",
avg(DISTINCT Price) AS "Distinct"
FROM Products;
Kết quả:
Non-Distinct Distinct ---------------- ---------- 45.2066666666667 62.81
Như bạn có thể hình dung, sử dụng DISTINCT
từ khóa với avg()
có thể làm sai lệch kết quả rất nhiều, đặc biệt nếu có nhiều bản sao ở một đầu của dải, nhưng không nhiều bản sao ở đầu kia.