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

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

Patricia Arquette
Patricia Arquetteasal
2024-12-29 11:05:11624semak imbas

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

Mendapatkan Dua Baris Teratas untuk Setiap Kumpulan dalam SQL

Pertanyaan SQL membolehkan pengguna mengekstrak data tertentu daripada jadual, tetapi bagaimana jika anda memerlukan untuk memilih dua baris teratas bagi setiap kumpulan? Senario ini boleh dihadapi apabila anda ingin menganalisis rekod pemarkahan tertinggi atau mendapatkan berbilang nilai dalam kumpulan.

Mari kita pertimbangkan jadual berikut sebagai contoh:

NAME SCORE
willy 1
willy 2
willy 3
zoe 4
zoe 5
zoe 6

Untuk mendapatkan semula dua markah tertinggi untuk setiap nama, kami boleh menggunakan pertanyaan SQL berikut:

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

Begini caranya pertanyaan berfungsi:

  • Pertanyaan luar (PILIH * DARI ujian s) memilih semua baris daripada jadual ujian.
  • Pertanyaan dalam, yang disertakan dalam kurungan, mengira kiraan baris dalam jadual ujian dengan nama yang diberikan dan skor lebih besar daripada atau sama dengan skor baris semasa (f.skor >= s.score).
  • Klausa WHERE pertanyaan luar menapis baris berdasarkan kiraan daripada pertanyaan dalam. Hanya baris dengan kiraan kurang daripada atau sama dengan 2 dipilih. Ini memastikan kami mendapat dua markah teratas untuk setiap kumpulan.
  • Output yang dijangkakan untuk pertanyaan ini adalah seperti berikut:

    NAME SCORE
    willy 2
    willy 3
    zoe 5
    zoe 6

    Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan 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