SQL pilih hanya baris dengan nilai maksimum pada lajur
P粉937382230
2023-08-23 11:08:57
<p>Saya mempunyai borang dokumen ini (di sini ialah versi ringkas): </p>
<table class="s-table">
<kepala>
<tr>
<th>id</th>
<th>Pemindahan</th>
<th>Kandungan</th>
</tr>
</kepala>
<tbody>
<tr>
<td>1</td>
<td>1</td>
<td>...</td>
</tr>
<tr>
<td>2</td>
<td>1</td>
<td>...</td>
</tr>
<tr>
<td>1</td>
<td>2</td>
<td>...</td>
</tr>
<tr>
<td>1</td>
<td>3</td>
<td>...</td>
</tr>
</tbody>
</table>
<p>Bagaimana untuk memilih satu baris setiap ID dan hanya RPM terbesar? </p><p>
Menggunakan data di atas, hasilnya harus mengandungi dua baris: <code>[1, 3, ...]</code> dan <code>[2, 1, ..]</code> . Saya menggunakan<em><strong>MySQL</strong></em>. </p>
<p>Pada masa ini, saya menggunakan semakan dalam <kod>semasa</kod> gelung untuk mengesan dan menulis ganti rev lama dalam set hasil. Tetapi adakah ini satu-satunya cara untuk mencapai keputusan ini? Tidak mempunyai <strong>SQL</strong> </p>
Keutamaan saya adalah menggunakan kod sesedikit mungkin...
Anda boleh melakukan ini menggunakan
IN
Cuba ini:Pada pendapat saya, ia kurang kompleks... lebih mudah dibaca dan diselenggara.
Sepintas lalu...
Apa yang anda perlukan hanyalah klausa dengan
MAX
聚合函数的GROUP BY
:Perkara tidak pernah semudah itu, bukan?
Saya baru perasan bahawa anda juga memerlukan
content
lajur.Ini adalah masalah yang sangat biasa dalam SQL: cari semua data untuk baris dengan beberapa nilai maksimum dalam setiap lajur pengecam kumpulan. Saya sering mendengar kenyataan ini dalam kerjaya saya. Sebenarnya, ini adalah salah satu soalan yang saya jawab dalam temuduga teknikal di tempat kerja saya sekarang.
Malah, komuniti Stack Overflow mencipta teg untuk mengendalikan soalan seperti ini: terhebat-n-per-kumpulan.
Pada asasnya, anda mempunyai dua cara untuk menyelesaikan masalah ini:
Guna mudah
group-identifier, max-value-in-group
subquery joinDalam pendekatan ini anda mula-mula mencari
dangroup-identifier, max-value-in-group
(上面已解决)。然后,将表连接到子查询,并在group-identifier
和max-value-in-group
dalam subkueri (diselesaikan di atas). Kemudian, sertai jadual ke subkueri dan jadikan ia sama padamaks-nilai-dalam-kumpulan
:group-identifier
Dalam kaedah ini anda meninggalkan sertai jadual dengan dirinya sendiri. Kesaksamaan wujud dalamNULL
(这是一个LEFT JOIN
Apabila anda melakukan langkah 1, baris yang sebenarnya mempunyai nilai terbesar akan ditunjukkan di sebelah kanangroup-identifier
具有max-value-in-group
Jika anda mempunyai dua barisKedua-dua pendekatan juga mesra prestasi, tetapi situasi anda mungkin berbeza (RDBMS, struktur pangkalan data, indeks, dll.). Jadi apabila anda memilih satu kaedah berbanding kaedah yang lain, Tanda Aras
. Dan pastikan anda memilih yang paling sesuai untuk anda. 🎜