Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Cekap Mendapatkan Nilai Yang Dikaitkan dengan Nilai Lajur Maksimum Dalam Kumpulan dalam Oracle SQL?
Oracle SQL: Mengekstrak Nilai Dipautkan kepada Nilai Lajur Maksimum dalam Kumpulan
Tugas pangkalan data biasa melibatkan pemilihan nilai yang dikaitkan dengan nilai maksimum lajur, terutamanya apabila berurusan dengan data terkumpul. Mari kita pertimbangkan jadual dengan lajur KEY
, NUM
dan VAL
:
KEY | NUM | VAL |
---|---|---|
A | 1 | AB |
B | 1 | CD |
B | 2 | EF |
C | 2 | GH |
C | 3 | HI |
D | 1 | JK |
D | 3 | LM |
Objektifnya adalah untuk mencari NUM
maksimum bagi setiap KEY
dan VAL
yang sepadan. Output yang dikehendaki:
KEY | VAL |
---|---|
A | AB |
B | EF |
C | HI |
D | LM |
Satu kaedah menggunakan subkueri:
<code class="language-sql">select KEY, VAL from TABLE_NAME TN where NUM = ( select max(NUM) from TABLE_NAME TMP where TMP.KEY = TN.KEY );</code>
Walau bagaimanapun, pendekatan yang lebih cekap dan boleh dibaca menggunakan fungsi ROW_NUMBER()
:
<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>
Ini memberikan pangkat dalam setiap KEY
kumpulan berdasarkan nilai NUM
menurun. Klausa WHERE
kemudian menapis untuk kedudukan teratas (seqnum = 1
), menghasilkan hasil yang diingini:
KEY | VAL |
---|---|
A | AB |
B | EF |
C | HI |
D | LM |
Walaupun kedua-dua kaedah mencapai hasil yang sama, pendekatan ROW_NUMBER()
umumnya memberikan prestasi dan kejelasan yang lebih baik, terutamanya dengan set data yang lebih besar. Pilihan optimum bergantung pada keperluan dan keutamaan tertentu, tetapi ROW_NUMBER()
menawarkan penyelesaian yang mantap dan elegan untuk masalah SQL biasa ini.
Atas ialah kandungan terperinci Bagaimana untuk Cekap Mendapatkan Nilai Yang Dikaitkan dengan Nilai Lajur Maksimum Dalam Kumpulan dalam Oracle SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!