Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Mendapatkan Dua Markah Teratas untuk Setiap Kumpulan dalam SQL?

Bagaimana untuk Mendapatkan Dua Markah Teratas untuk Setiap Kumpulan dalam SQL?

Barbara Streisand
Lepaskan: 2025-01-03 05:21:37
asal
855 orang telah melayarinya

How to Retrieve the Top Two Scores for Each Group in SQL?

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
Salin selepas log masuk

Memecahkan Pertanyaan:

  • Pertanyaan luar, PILIH * DARI ujian s, dapatkan semula semua baris daripada jadual ujian dan namakannya sebagai s.
  • Subkueri, yang disertakan dalam kurungan, mengira pangkat markah setiap pelajar:

    • PILIH KIRAAN(*) DARI ujian f: Bahagian ini mengira bilangan baris dalam jadual ujian di mana nama (f.name) sepadan dengan nama baris semasa (s.nama) dan skor (f.skor) lebih besar daripada atau sama dengan skor baris semasa (s.skor).
  • Klausa WHERE menggunakan penapis pada pertanyaan luar, memilih hanya baris yang pangkatnya (seperti yang ditentukan oleh subkueri) kurang daripada atau sama dengan 2.

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan