Masalah:
Anda menggabungkan data ke dalam grup, tetapi Anda ingin mengurutkan rekaman dalam urutan menurun menurut jumlah elemen dalam grup.
Contoh:
Database kami memiliki tabel bernama user
dengan data pada kolom berikut:id
, first_name
, last_name
, dan country
.
id | nama_depan | nama_belakang | negara |
---|---|---|---|
1 | Lisa | Williams | Inggris |
2 | Gary | Anders | Polandia |
3 | Tom | Williams | Polandia |
4 | Michael | Coklat | Prancis |
5 | Susan | Smith | AS |
6 | Anne | Jones | AS |
7 | Ellie | Miller | Polandia |
Mari buat laporan tentang pengguna kami. Kami akan mengelompokkan hasilnya menurut country
dan menghitung jumlah pengguna dari setiap negara. Namun kami juga akan mengurutkan grup dalam urutan menurun berdasarkan jumlah pengguna. Dengan begitu, negara dengan jumlah pengguna terbanyak akan muncul di urutan teratas.
Solusi:
SELECT country, COUNT(id) FROM user GROUP BY country ORDER BY COUNT(id) DESC ;
negara | jumlah(id) |
---|---|
Polandia | 3 |
AS | 2 |
Inggris | 1 |
Prancis | 1 |
Diskusi:
Untuk mengurutkan record yang dipilih menurut jumlah elemen dalam setiap grup, gunakan ORDER BY
klausa.
Langkah pertama adalah menggunakan GROUP BY
klausa untuk membuat grup (dalam contoh kami, kami mengelompokkan berdasarkan country
kolom). Kemudian, dalam klausa ORDER BY, Anda menggunakan fungsi agregat COUNT, yang menghitung jumlah nilai dalam kolom pilihan Anda; dalam contoh kami, kami menghitung ID yang berbeda dengan COUNT(id)
. Ini secara efektif menghitung jumlah elemen di setiap grup. ORDER BY
klausa kemudian mengurutkan grup menurut perhitungan itu.
Seperti biasa, Anda dapat menggunakan urutan menaik atau menurun dengan ORDER BY
. Jika Anda ingin urutan menurun (seperti dalam contoh ini), Anda menggunakan DESC
kata kunci. Urutan menaik tidak memerlukan kata kunci apa pun karena ini adalah default, tetapi Anda dapat menggunakan ASC
kata kunci jika Anda ingin eksplisit. Ini adalah contoh yang sama tetapi dengan hasil yang diurutkan dalam urutan menaik:
Solusi:
SELECT country, COUNT(id) FROM user GROUP BY country ORDER BY COUNT(id);
Ini hasilnya:
negara | jumlah(id) |
---|---|
Inggris | 1 |
Prancis | 1 |
AS | 2 |
Polandia | 3 |