Cari rekod terbesar mengikut kumpulan dalam SQL
Dalam pengurusan pangkalan data, selalunya perlu mendapatkan semula rekod terbesar dalam setiap kumpulan data. Pertimbangkan senario berikut.
Soalan:
Anda mempunyai jadual dengan tiga medan: "Nama", "Atas" dan "Jumlah", dengan data berikut:
Name | Top | Total |
---|---|---|
cat | 1 | 10 |
dog | 2 | 7 |
cat | 3 | 20 |
horse | 4 | 4 |
cat | 5 | 10 |
dog | 6 | 9 |
Tugas anda ialah mencari rekod dengan nilai "Jumlah" terbesar untuk setiap nilai "Nama" unik. Hasil yang diingini hendaklah:
Name | Top | Total |
---|---|---|
cat | 3 | 20 |
horse | 4 | 4 |
dog | 6 | 9 |
Penyelesaian:
Untuk mendapatkan semula rekod maksimum bagi setiap kumpulan, anda boleh menggunakan pertanyaan berikut:
<code class="language-sql">select Name, Top, Total from sometable where Total = (select max(Total) from sometable i where i.Name = sometable.Name)</code>
Pertanyaan ini membandingkan nilai "Jumlah" setiap rekod dengan nilai "Jumlah" maksimumnya dalam kumpulan "Nama" yang sama. Kemudian pilih rekod yang nilai "Jumlah"nya sepadan.
Sebagai alternatif, anda boleh menggunakan subkueri untuk mencapai hasil yang sama:
<code class="language-sql">select Name, Top, Total from sometable inner join ( select max(Total) as Total, Name from sometable group by Name ) as max on max.Name = sometable.Name and max.Total = sometable.Total</code>
Pertanyaan ini mula-mula menggunakan subkueri untuk mengira nilai "Jumlah" maksimum untuk setiap "Nama" unik. Pertanyaan utama kemudiannya bergabung dengan jadual dengan subquery untuk memilih hanya rekod dengan nilai "Jumlah" maksimum yang sepadan.
Atas ialah kandungan terperinci Bagaimana untuk Mencari Rekod Maksimum untuk Setiap Kumpulan dalam SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!