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
Lepaskan: 2025-01-21 08:12:10
asal
416 orang telah melayarinya

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

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

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

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!

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