Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Mencari Nilai Maksimum dalam Lajur untuk Setiap Kumpulan dalam Jadual Besar dengan Cekap?

Bagaimanakah Saya Boleh Mencari Nilai Maksimum dalam Lajur untuk Setiap Kumpulan dalam Jadual Besar dengan Cekap?

Patricia Arquette
Patricia Arquetteasal
2025-01-21 08:12:10494semak imbas

How Can I Efficiently Find the Maximum Value in a Column for Each Group in a Large Table?

Cari nilai maksimum dalam lajur berkumpulan jadual besar

Dalam contoh ini, anda perlu mengekstrak baris dengan nilai maksimum lajur tertentu daripada setiap kumpulan jadual besar tanpa melakukan carian berbilang jadual yang tidak cekap. Pertimbangkan borang berikut:

<code>SCORES
ID    ROUND    SCORE
1     1        3
1     2        6
1     3        2
2     1        10
2     2        12
3     1        6</code>

Matlamat anda adalah untuk mendapatkan pusingan terkini bagi setiap ID unik dan skor yang sepadan. Output yang dikehendaki adalah seperti berikut:

<code>ID   ROUND   SCORE
1    2       6
2    2       12
3    1       6</code>

Penyelesaian yang cekap menggunakan fungsi tetingkap

Kaedah yang cekap ialah menggunakan fungsi tetingkap bersama dengan kata kunci DISTINCT:

<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 menggunakan konsep utama berikut:

  • PEMBAHAGIAN OLEH: Himpunkan baris mengikut lajur id.
  • MAX(pusingan): Kira bilangan maksimum pusingan dalam setiap partition.
  • FIRST_VALUE(skor): Mendapatkan semula markah pertama (terkini) untuk setiap id dengan bilangan pusingan maksimum.
  • DISTINCT: Memastikan hanya baris unik dikembalikan, menghapuskan hasil pendua.

Pertanyaan yang dioptimumkan ini dengan cekap mengembalikan pusingan dan markah terkini untuk setiap ID unik tanpa perlu mengimbas jadual beberapa kali, kekal cekap walaupun untuk meja besar.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencari Nilai Maksimum dalam Lajur untuk Setiap Kumpulan dalam Jadual Besar dengan Cekap?. 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