Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Memilih Nilai Berasaskan Maksimum dengan Cekap dalam Oracle SQL Menggunakan Fungsi Tetingkap?
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
OVER (PARTITION BY key ORDER BY num DESC)
membahagikan data mengikut lajur KEY
dan menyusun setiap partition mengikut lajur NUM
dalam tertib menurun.ROW_NUMBER()
memberikan kedudukan unik kepada setiap baris dalam partitionnya. Baris dengan nilai NUM
tertinggi menerima pangkat 1.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!