SQLite
 sql >> Teknologi Basis Data >  >> RDS >> SQLite

Hapus Duplikat dari Count() Hasil di SQLite

Saat menggunakan count() fungsi di SQLite, Anda mungkin menemukan diri Anda dalam situasi di mana Anda hanya ingin menghitung nilai yang berbeda. Artinya, Anda tidak ingin nilai duplikat dihitung beberapa kali.

Dengan kata lain, jika kolom memiliki nilai yang sama beberapa kali, kolom tersebut seharusnya hanya menghitung nilai tersebut satu kali.

Secara default, count() akan menyertakan semua nilai duplikat dalam perhitungannya. Misalnya, jika nilai “Kucing” muncul 3 kali, count() akan menghitungnya sebagai 3.

Namun, jika Anda hanya ingin nilai yang berbeda dihitung, maka count() akan menghitungnya sebagai 1.

Untungnya, ada cara mudah untuk melakukan ini. Yang perlu Anda lakukan adalah menambahkan DISTINCT kata kunci ke count() . Anda fungsi. Seperti ini:

count(DISTINCT x)

Dimana x adalah nama kolom untuk konten yang Anda hitung (atau seluruh baris jika Anda menggunakan karakter pengganti asterisk).

Contoh

Ambil tabel berikut:

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     

Perhatikan bahwa baris 2 hingga 4 semuanya memiliki harga yang sama (10.0).

Jika saya melakukan count() normal yang normal pada Harga kolom, itu akan menghitung semua enam baris.

SELECT count(Price) FROM Products;

Hasil:

6

Namun, jika saya menambahkan DISTINCT kata kunci, itu akan menghitung tiga baris itu sebagai satu.

SELECT count(DISTINCT Price) FROM Products;

Hasil:

4

Hitung Baris Berbeda

count() fungsi menerima wildcard asterisk (* ), yang berarti akan menghitung semua baris.

Namun, Anda mungkin akan mendapatkan kesalahan jika mencoba menggunakan DISTINCT saat menggunakan wildcard asterisk.

Berikut tabel dengan baris duplikat.

Postal      State             
----------  ------------------
NSW         New South Wales   
NSW         New South Wales   
QLD         Queensland        
TAS         Tasmania          
SA          South Australia   
WA          Western Australia 
VIC         Victoria          

Secara teori, saya seharusnya bisa menggunakan DISTINCT untuk menghitung baris "de-duped" dalam tabel ini. Namun, itu sepertinya tidak mungkin.

SELECT count(DISTINCT *)
FROM States;

Hasil:

Error: near "*": syntax error

Sebagai gantinya, saya perlu menentukan nama kolom saat menggunakan DISTINCT kata kunci.

SELECT 
  count(State),
  count(DISTINCT State)
FROM States;

Hasil:

count(State)  count(DISTINCT State)
------------  ---------------------
7             6                    

Cara lain untuk melakukannya adalah dengan melakukan sesuatu seperti ini:

SELECT count(*) FROM (SELECT DISTINCT * FROM States);

Hasil:

6

Ini seharusnya tidak menjadi masalah, karena umumnya bukan desain database yang baik untuk mengizinkan baris duplikat seperti ini.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQLite - Perbarui Data

  2. Android Studio 3.0 canary 1:Kesalahan sintaks SQL

  3. Realm Android Menangani Kunci Utama di Objek Relasional

  4. Tampilkan Hasil Kueri SQLite menggunakan Output Vertikal

  5. Menghapus item dari ListView dan Database dengan OnItemClickListener