Rumah > pangkalan data > tutorial mysql > Bagaimanakah Saya Boleh Mendapatkan Nilai Maksimum setiap Kumpulan dengan Cekap dalam Jadual SQL Tunggal?

Bagaimanakah Saya Boleh Mendapatkan Nilai Maksimum setiap Kumpulan dengan Cekap dalam Jadual SQL Tunggal?

Mary-Kate Olsen
Lepaskan: 2025-01-21 07:56:14
asal
868 orang telah melayarinya

How Can I Efficiently Retrieve the Maximum Value per Group in a Single SQL Table?

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan