SQLite
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> SQLite

Chỉnh sửa Kết quả Tr.bình () của bạn trong SQLite với Từ khoá DISTINCT

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. (Android) Tìm đường dẫn / Android trong bộ nhớ trong

  2. Hiển thị tiến trình trong khi doInbackground

  3. Làm cách nào để chạy truy vấn SQLite không đồng bộ trên luồng nền?

  4. Cách lấy thời gian hiện tại trong SQLite

  5. Android:mở và đóng cơ sở dữ liệu SQLite