Mengoptimumkan Pertanyaan SQL untuk Pendapatan Nilai Maksimum bagi setiap Kumpulan
Pendapatan data yang cekap adalah yang paling penting apabila bekerja dengan jadual SQL yang besar. Tugas yang kerap melibatkan mengenal pasti nilai maksimum dalam kumpulan baris tertentu. Artikel ini menunjukkan pertanyaan SQL yang dioptimumkan untuk mencapai ini dengan cekap, mengelakkan imbasan jadual berbilang.
Mari kita pertimbangkan jadual SCORES
dengan lajur ID
, ROUND
dan SCORE
. Objektifnya adalah untuk mendapatkan ROUND
maksimum bagi setiap ID
dan SCORE
yang sepadan. Kaedah tidak cekap yang melibatkan pemprosesan berulang tidak sesuai untuk set data yang besar.
Pertanyaan berikut menggunakan fungsi tetingkap dan DISTINCT
untuk prestasi optimum:
<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>
Pendekatan ini menggunakan fungsi tetingkap untuk mengira maksimum ROUND
dan SCORE
yang sepadan dalam setiap kumpulan ID
. Klausa DISTINCT
kemudian mengalih keluar baris pendua, memastikan hanya ROUND
tertinggi setiap ID
dikembalikan. Ini mengurangkan masa pemprosesan dengan ketara berbanding dengan beberapa imbasan jadual.
Kaedah alternatif yang sama berkesan menggunakan FIRST_VALUE
dua kali:
<code class="language-sql">SELECT DISTINCT id ,first_value(round) OVER (PARTITION BY id ORDER BY round DESC) 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>
Kedua-dua pertanyaan menghasilkan hasil yang sama:
ID | ROUND | SCORE |
---|---|---|
1 | 3 | 2 |
2 | 2 | 12 |
3 | 1 | 6 |
Pertanyaan yang dioptimumkan ini menawarkan peningkatan prestasi yang ketara berbanding kaedah yang kurang cekap dengan mendapatkan semula nilai maksimum bagi setiap kumpulan dalam satu imbasan jadual. Ini penting untuk mengekalkan responsif apabila berurusan dengan set data yang besar.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mendapatkan Nilai Maksimum setiap Kumpulan dengan Cekap dalam Jadual SQL Tunggal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!