Pertanyaan SQL untuk Mencari Nilai Lajur Maksimum Dikumpulkan mengikut ID
Artikel ini menangani masalah mendapatkan semula nilai tertinggi dengan cekap daripada lajur, dikumpulkan mengikut ID unik dalam jadual pangkalan data. Mari kita ilustrasikan dengan jadual "SKOR":
<code>ID ROUND SCORE 1 1 3 1 2 6 1 3 2 2 1 10 2 2 12 3 1 6</code>
Matlamat kami adalah untuk mendapatkan baris yang mengandungi nilai "BULAT" maksimum untuk setiap "ID", bersama "SKOR" yang sepadan dengannya. Output yang dikehendaki ialah:
<code>ID ROUND SCORE 1 3 2 2 2 12 3 1 6</code>
Walaupun pendekatan subkueri boleh dilakukan, pendekatan ini boleh menjadi tidak cekap untuk set data yang besar. Kaedah unggul menggunakan fungsi tetingkap:
<code class="language-sql">SELECT DISTINCT id ,max(round) OVER (PARTITION BY id) AS round ,first_value(score) OVER (PARTITION BY id ORDER BY round DESC) AS score FROM SCORES WHERE id IN (1,2,3) ORDER BY id;</code>
Pertanyaan ini memanfaatkan max(round) OVER (PARTITION BY id)
untuk menentukan "BULAT" maksimum bagi setiap "ID". first_value(score) OVER (PARTITION BY id ORDER BY round DESC)
kemudian mendapatkan semula "SKOR" yang dikaitkan dengan "PUSINGAN" maksimum itu. DISTINCT
memastikan hanya satu baris setiap "ID" dikembalikan.
Pendekatan fungsi tetingkap ini mengelakkan berbilang imbasan jadual, memberikan penyelesaian yang lebih cekap dengan ketara untuk pangkalan data yang besar.
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Nilai Tertinggi Lajur Dikumpulkan mengikut ID dalam SQL dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!