Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Mendapatkan Nilai Maksimum dan Data Berkaitannya dengan Cekap dalam SQL?

Bagaimanakah Saya Boleh Mendapatkan Nilai Maksimum dan Data Berkaitannya dengan Cekap dalam SQL?

Patricia Arquette
Patricia Arquetteasal
2025-01-07 17:01:41762semak imbas

How Can I Efficiently Retrieve Maximum Values and Their Associated Data in 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:

  1. 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>
  2. 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn