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

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

Barbara Streisand
Lepaskan: 2024-12-31 08:42:10
asal
707 orang telah melayarinya

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

Baris N Teratas untuk Setiap Kumpulan dalam SQL

Dalam SQL, memilih baris teratas untuk setiap kumpulan boleh dilakukan menggunakan fungsi tetingkap. Fungsi tetingkap membenarkan pengiraan dilakukan pada satu set baris, dikenali sebagai tetingkap, yang ditakrifkan oleh susunan dan partition yang ditentukan. Dalam kes ini, kami ingin memilih dua baris teratas untuk setiap kumpulan, yang boleh dicapai menggunakan langkah berikut:

  1. Pahasi data: Tentukan kumpulan yang anda gunakan ingin memilih baris atas menggunakan klausa PARTITION BY. Dalam contoh ini, kami mahu mengumpulkan data mengikut lajur NAME.
  2. Kedudukan baris dalam setiap kumpulan: Gunakan fungsi tetingkap ROW_NUMBER() untuk memberikan nombor berjujukan kepada setiap baris dalam setiap kumpulan, bermula dari 1. Ini akan memberikan kami pangkat setiap baris dalam kumpulannya.
  3. Tapis bahagian atas baris: Gunakan penapis untuk memilih hanya baris yang mempunyai kedudukan 1 atau 2. Ini akan memberikan kami dua baris teratas untuk setiap kumpulan.

Berikut ialah contoh pertanyaan yang melaksanakan ini langkah:

SELECT *
FROM (
    SELECT *, RANK() OVER (PARTITION BY NAME ORDER BY SCORE DESC) AS row_rank
    FROM test
) AS ranked
WHERE row_rank <= 2
Salin selepas log masuk

Pertanyaan ini akan menghasilkan output yang diingini, seperti yang ditunjukkan di bawah:

NAME    SCORE
-----------------
willy       2
willy       3
zoe         5
zoe         6
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Memilih Baris N 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