Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Memilih Nilai Berasaskan Maksimum dengan Cekap dalam Oracle SQL Menggunakan Fungsi Tetingkap?

Bagaimanakah Saya Boleh Memilih Nilai Berasaskan Maksimum dengan Cekap dalam Oracle SQL Menggunakan Fungsi Tetingkap?

Susan Sarandon
Susan Sarandonasal
2025-01-17 19:17:09543semak imbas

How Can I Efficiently Select Maximum-Based Values in Oracle SQL Using Window Functions?

Oracle SQL: Mengekstrak Nilai Maksimum dengan Fungsi Tetingkap

Mengambil nilai lajur tertentu dengan cekap berdasarkan nilai maksimum lajur lain, sambil mengumpulkan satu pertiga, mudah dicapai dalam Oracle SQL menggunakan fungsi tetingkap. Pendekatan ini menawarkan kelebihan keanggunan dan prestasi berbanding kaedah alternatif.

Pertimbangkan jadual contoh ini:

KEY NUM VAL
A 1 AB
B 1 CD
B 2 EF
C 2 GH
C 3 HI
D 1 JK
D 3 LM

Penyelesaian Fungsi Tetingkap

Penyelesaian optimum memanfaatkan ROW_NUMBER() fungsi tetingkap:

<code class="language-sql">SELECT key, val
FROM (
  SELECT t.*,
         ROW_NUMBER() OVER (PARTITION BY key ORDER BY num DESC) AS seqnum
  FROM table_name t
) t
WHERE seqnum = 1;</code>

Pertanyaan ini menghasilkan keputusan berikut:

KEY VAL
A AB
B EF
C HI
D LM

Cara Ia Berfungsi

  1. Fasal OVER (PARTITION BY key ORDER BY num DESC) membahagikan data mengikut lajur KEY dan menyusun setiap partition mengikut lajur NUM dalam tertib menurun.
  2. ROW_NUMBER() memberikan kedudukan unik kepada setiap baris dalam partitionnya. Baris dengan nilai NUM tertinggi menerima pangkat 1.
  3. Klausa WHERE luar menapis hasil, mengekalkan hanya baris dengan seqnum = 1, dengan berkesan memilih nilai NUM maksimum untuk setiap KEY.

Perbezaan Utama

Satu perkara penting: Tidak seperti kaedah alternatif, pendekatan fungsi tetingkap menjamin satu baris setiap KEY, walaupun berbilang baris berkongsi nilai NUM maksimum yang sama. Tingkah laku ini mungkin berbeza daripada teknik lain yang boleh mengembalikan berbilang baris dalam kes sedemikian. Jika perbezaan ini tidak penting, fungsi tetingkap menawarkan penyelesaian unggul kerana kejelasan dan kecekapannya.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memilih Nilai Berasaskan Maksimum dengan Cekap dalam Oracle SQL Menggunakan Fungsi Tetingkap?. 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