Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengambil VAL Maksimum untuk Setiap KEY dalam Data Berkumpulan Menggunakan Oracle SQL?
Mengekstrak VAL Tertinggi untuk Setiap KEY dalam Oracle SQL
Panduan ini menunjukkan cara untuk mendapatkan VAL
maksimum dengan cekap untuk setiap KEY
dalam data terkumpul menggunakan Oracle SQL. Mari kita periksa senario biasa:
Jadual bernama TABLE_NAME
mengandungi data berikut:
KEY | NUM | VAL |
---|---|---|
A | 1 | AB |
B | 1 | CD |
B | 2 | EF |
C | 2 | GH |
C | 3 | HI |
D | 1 | JK |
D | 3 | LM |
Matlamatnya adalah untuk menjana set hasil yang menunjukkan hanya maksimum VAL
untuk setiap unik KEY
:
KEY | VAL |
---|---|
A | AB |
B | EF |
C | HI |
D | LM |
Penyelesaian Oracle SQL yang Cekap (10g ke atas):
Walaupun subqueries boleh mencapai ini, penyelesaian yang lebih elegan dan selalunya lebih pantas menggunakan ROW_NUMBER()
fungsi analitik:
<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 mula-mula memberikan kedudukan (seqnum
) kepada setiap baris dalam setiap KEY
partition, disusun mengikut NUM
dalam tertib menurun. Kemudian, ia menapis hasil untuk hanya memasukkan baris dengan seqnum = 1
, dengan berkesan memilih baris dengan NUM
tertinggi (dan dengan itu, secara tersirat, tertinggi VAL
dengan mengandaikan hubungan yang konsisten antara NUM
dan VAL
dalam setiap kunci).
Nota Penting: Kaedah ini menjamin satu baris setiap KEY
. Jika anda perlu mengendalikan potensi ikatan dalam NUM
secara berbeza (cth., kembalikan berbilang baris untuk KEY
jika berbilang baris berkongsi maksimum NUM
), pertimbangkan untuk menggunakan RANK()
atau DENSE_RANK()
dan bukannya ROW_NUMBER()
.
Atas ialah kandungan terperinci Bagaimana untuk Mengambil VAL Maksimum untuk Setiap KEY dalam Data Berkumpulan Menggunakan Oracle SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!