Jika Anda tahu tentang avg()
fungsi di SQLite, Anda mungkin menyadari bahwa ini mengembalikan rata-rata semua non-NULL X dalam grup.
Tapi tahukah Anda bahwa Anda dapat menambahkan DISTINCT
kata kunci untuk fungsi ini?
Jika Anda menambahkan DISTINCT
kata kunci, avg()
akan menghitung hasilnya berdasarkan nilai yang berbeda saja. Ini pada dasarnya sama dengan menghapus nilai duplikat dan kemudian menghitung rata-rata pada nilai yang tersisa.
Sintaks
Untuk menggunakan DISTINCT
kata kunci, Anda cukup memasukkannya sebagai argumen pertama.
Seperti ini:
avg(DISTINCT X)
Dimana X
adalah nama kolom yang rata-ratanya Anda hitung.
Contoh
Ambil tabel berikut yang disebut 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
Jika saya menjalankan avg()
normal yang normal pada kolom Harga:
SELECT avg(Price) FROM Products;
Inilah yang saya dapatkan:
45.2066666666667
Tetapi jika saya menjalankan DISTINCT
permintaan:
SELECT avg(DISTINCT Price) FROM Products;
Saya mengerti ini:
62.81
Jadi dalam hal ini hasilnya sangat berubah.
Untuk lebih jelasnya, ini dia berdampingan:
SELECT
avg(Price) AS "Non-Distinct",
avg(DISTINCT Price) AS "Distinct"
FROM Products;
Hasil:
Non-Distinct Distinct ---------------- ---------- 45.2066666666667 62.81
Seperti yang mungkin Anda bayangkan, menggunakan DISTINCT
kata kunci dengan avg()
dapat sangat mendistorsi hasil, terutama jika ada banyak duplikat di satu ujung rentang, tetapi tidak banyak duplikat di ujung lainnya.