Rumah > pangkalan data > tutorial mysql > Bagaimana untuk mengambil hanya baris N atas setiap kumpulan di MySQL?

Bagaimana untuk mengambil hanya baris N atas setiap kumpulan di MySQL?

Susan Sarandon
Lepaskan: 2025-01-25 11:57:10
asal
867 orang telah melayarinya

How to Retrieve Only the Top N Rows per Group in MySQL?

MySQL dengan cekap memperoleh N baris pertama data untuk setiap kumpulan

Penerangan masalah:

Dalam pertanyaan pangkalan data, anda mungkin perlu mendapatkan hanya N baris pertama data untuk setiap pengumpulan data. Contohnya, set data anda mungkin mengandungi berbilang baris maklumat yang dikumpulkan mengikut tahun dan ID. Jika anda ingin memaparkan lima rekod tertinggi tertinggi bagi setiap ID, anda perlu melaksanakan kaedah untuk mengehadkan keputusan kepada nombor yang dikehendaki.

Penyelesaian:

Dalam MySQL 8 atau lebih baru, anda boleh menggunakan fungsi ROW_NUMBER, RANK atau DENSE_RANK untuk mencapai ini. Fungsi khusus yang anda pilih bergantung pada takrifan tepat "baris N pertama" dan cara mengendalikan situasi selari. Berikut ialah pecahan hasil yang dijana oleh fungsi ini:

  • ROW_NUMBER: Berikan nombor jujukan kepada baris dalam setiap kumpulan, bermula dari 1. Fungsi ini sesuai jika anda ingin memutuskan hubungan dengan memberikan baris dengan nilai yang sama pangkat yang sama.
  • PANGKAT: Berikan kedudukan kepada baris dalam setiap kumpulan, hubungan akan menghasilkan kedudukan yang sama. Fungsi ini berguna jika anda mengutamakan kedudukan yang berbeza.
  • DENSE_RANK: Sama seperti RANK, tetapi ia memberikan ranking padat, bermakna walaupun seri, tiada jurang antara ranking. Fungsi ini sesuai apabila anda ingin memastikan bahawa baris berikutnya mempunyai kedudukan yang unik.

Contoh:

Pertanyaan berikut menggunakan fungsi ROW_NUMBER untuk mengembalikan 5 baris pertama bagi setiap ID, diisih mengikut rating dalam tertib menurun:

<code class="language-sql">SELECT
    year, id, rate
FROM (
    SELECT
        year, id, rate,
        ROW_NUMBER() OVER (PARTITION BY id ORDER BY rate DESC) AS rank_num
    FROM h
    WHERE year BETWEEN 2000 AND 2009
) AS subquery
WHERE rank_num <= 5;</code>
Salin selepas log masuk

Output:

year id rate
2006 p01 8.0
2003 p01 7.4
2008 p01 6.8
2001 p01 5.9
2007 p01 5.3
2001 p02 12.5
2004 p02 12.4
2002 p02 12.2
2003 p02 10.3
2000 p02 8.7

Dengan menggunakan fungsi ini anda boleh mengehadkan hasil dengan berkesan kepada N baris pertama setiap kumpulan dan memastikan susunan data yang diingini.

Atas ialah kandungan terperinci Bagaimana untuk mengambil hanya baris N atas setiap kumpulan di MySQL?. 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