Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Mendapatkan Nilai Maksimum dan Data Berkaitannya dengan Cekap dalam SQL?
Mengoptimumkan Pertanyaan SQL: Mendapatkan Nilai Maksimum dan Data Berkaitan
Mengekstrak nilai maksimum dengan cekap bersama-sama dengan data yang berkaitan daripada lajur lain ialah tugas SQL yang kerap. Untuk set data yang besar, kaedah standard seperti pilihan bersarang atau pertanyaan GROUP BY
mudah boleh menjadi tidak cekap.
Pertimbangkan jadual dengan lajur ID
, tag
dan version
. Matlamatnya adalah untuk mencari version
maksimum untuk setiap ID
unik dan mendapatkan tag
yang sepadan.
Penyelesaian yang sangat cekap menggunakan ROW_NUMBER()
fungsi tetingkap:
Kedudukan Baris: Subkueri memberikan kedudukan kepada setiap baris berdasarkan lajur version
(tertib menurun), dibahagikan dengan lajur ID
:
<code class="language-sql">SELECT t.*, ROW_NUMBER() OVER (PARTITION BY t.id ORDER BY t.version DESC) AS rnk FROM YourTable t</code>
Penapis untuk Versi Maksimum: Pertanyaan luar hanya memilih baris dengan kedudukan (rnk
) ialah 1. Ini mengasingkan baris dengan version
tertinggi untuk setiap ID
:
<code class="language-sql">SELECT s.id, s.tag, s.version FROM ( SELECT t.*, ROW_NUMBER() OVER (PARTITION BY t.id ORDER BY t.version DESC) AS rnk FROM YourTable t ) s WHERE s.rnk = 1</code>
Kaedah ini mengelakkan pilihan bersarang dan operasi GROUP BY
yang mahal, menjadikannya lebih pantas dengan ketara untuk set data yang besar sambil mengekalkan ketepatan. Ia adalah pendekatan pilihan untuk prestasi optimum dalam senario sedemikian.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mendapatkan Nilai Maksimum dan Data Berkaitannya dengan Cekap dalam SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!