Dapatkan Dua Markah Teratas untuk Kumpulan Individu dalam SQL
Dalam pangkalan data hubungan, mengekstrak data yang bermakna daripada set data yang besar selalunya melibatkan pengumpulan berdasarkan rekod pada ciri-ciri tertentu. Apabila mendapatkan semula data daripada set berkumpulan, adalah perkara biasa untuk mendapatkan nilai tertinggi atau terendah dalam setiap kumpulan menggunakan fungsi pengagregatan. Namun, bagaimana jika anda perlu memilih baris N teratas untuk setiap kumpulan?
Pertimbangkan jadual berikut dengan nama pelajar dan markah yang sepadan:
NAME | SCORE |
---|---|
willy | 1 |
willy | 2 |
willy | 3 |
zoe | 4 |
zoe | 5 |
zoe | 6 |
Fungsi pengagregatan untuk pengumpulan hanya membenarkan anda untuk mendapatkan markah tertinggi bagi setiap nama. Untuk mendapatkan semula dua markah teratas bagi setiap pelajar, pendekatan yang berbeza diperlukan.
Pertanyaan berikut mencapai ini menggunakan subkueri untuk menjejaki kedudukan markah setiap pelajar dalam kumpulan masing-masing:
SELECT * FROM test s WHERE ( SELECT COUNT(*) FROM test f WHERE f.name = s.name AND f.score >= s.score ) <= 2
Memecahkan Pertanyaan:
Subkueri, yang disertakan dalam kurungan, mengira pangkat markah setiap pelajar:
Output:
Melaksanakan pertanyaan ini akan mengembalikan hasil berikut:
NAME | SCORE |
---|---|
willy | 2 |
willy | 3 |
zoe | 5 |
zoe | 6 |
Pertanyaan ini mendapatkan semula dua teratas dengan berkesan markah untuk setiap pelajar, memberikan pandangan yang lebih komprehensif tentang prestasi mereka berbanding dengan menggunakan MAX() mudah pengagregatan.
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Dua Markah Teratas untuk Setiap Kumpulan dalam SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!