Saya mencoba menemukan kueri MySQL yang akan menemukan nilai DISTINCT dalam bidang tertentu, menghitung jumlah kemunculan nilai itu dan kemudian memesan hasilnya berdasarkan hitungan.
contoh db
id name
----- ------
1 Mark
2 Mike
3 Paul
4 Mike
5 Mike
6 John
7 Mark
Hasil yang diharapkan
name count
----- -----
Mike 3
Mark 2
Paul 1
John 1
count(*) > 1
memasukkanwhere
klausa karena ini merupakan fungsi agregat. Anda juga mendapatkan pesan yang sangat tidak membantu: "Penggunaan fungsi grup tidak valid." Cara yang benar adalah dengan alias hitunganname,COUNT(*) as cnt
dan menambahkan memiliki klausul seperti:HAVING count > 1
.HAVING
untuk kondisi yang harus diterapkan setelah agregasi, sedangkanWHERE
untuk kondisi yang harus diterapkan sebelumnya. (Cara lain untuk berpikir tentang ini adalah yangWHERE
berlaku untuk data baris asli;HAVING
berlaku untuk data baris output.)Bagaimana dengan sesuatu yang seperti ini:
Anda memilih nama dan berapa kali itu muncul, tetapi pengelompokan berdasarkan nama sehingga setiap nama hanya dipilih sekali.
Akhirnya, Anda memesan berdasarkan berapa kali dalam urutan DESCending, untuk membuat pengguna yang paling sering muncul lebih dulu.
sumber
SELECT COUNT(DISTINCT name) as count FROM your_table
Untuk hitungan total baris tabel, melakukan query Pascal tanpagroup by
pernyataan.Baru saja mengubah COUNT (*) Amber menjadi COUNT (1) untuk kinerja yang lebih baik.
sumber