Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Memilih Dua Baris Teratas untuk Setiap Kumpulan dalam SQL?

Bagaimana untuk Memilih Dua Baris Teratas untuk Setiap Kumpulan dalam SQL?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-31 15:13:13587semak imbas

How to Select the Top Two Rows for Each Group in SQL?

Memilih Dua Baris Teratas dalam Setiap Kumpulan SQL

Dalam SQL, tugas biasa adalah untuk mendapatkan hanya baris teratas untuk setiap kumpulan. Walau bagaimanapun, fungsi pengagregatan standard untuk pengelompokan (seperti MAX() dan MIN()) hanya membenarkan pemilihan nilai tertinggi atau terendah.

Pertanyaan untuk Memilih Dua Markah Teratas bagi setiap Nama:

Untuk menangani cabaran ini, pertanyaan yang lebih kompleks diperlukan. Berikut ialah contoh cara memilih dua markah teratas bagi setiap nama dalam jadual yang disediakan:

SELECT *
FROM   test s
WHERE 
        (
            SELECT  COUNT(*) 
            FROM    test  f
            WHERE f.name = s.name AND 
                  f.score >= s.score
        ) <= 2;

Penjelasan:

  • Pertanyaan luar (PILIH * ...) mendapatkan semula semua baris daripada jadual ujian.
  • Subkueri (SELECT COUNT(*) ...) menentukan berapa banyak rekod wujud untuk setiap nama dalam jadual ujian dengan skor yang sama atau lebih besar daripada skor baris semasa.
  • Klausa WHERE kemudian menapis baris dalam pertanyaan luar dengan memastikan kiraan daripada subkueri adalah kurang daripada atau sama dengan 2.

Contoh Output:

Pertanyaan di atas mengembalikan output berikut:

NAME    SCORE
-----------------
willy       2
willy       3
zoe         5
zoe         6

Output ini termasuk dua markah teratas untuk setiap nama dalam jadual, seperti yang diminta.

Atas ialah kandungan terperinci Bagaimana untuk Memilih Dua Baris Teratas untuk Setiap Kumpulan dalam SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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