Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Memilih 3 Baris Teratas daripada Setiap Kategori dalam Jadual MySQL Tanpa Menggunakan Fungsi Analitik?

Bagaimana untuk Memilih 3 Baris Teratas daripada Setiap Kategori dalam Jadual MySQL Tanpa Menggunakan Fungsi Analitik?

Linda Hamilton
Lepaskan: 2024-10-29 14:58:02
asal
426 orang telah melayarinya

How to Select the Top 3 Rows from Each Category in a MySQL Table Without Using Analytic Functions?

MySQL Query: Memilih 3 Baris Teratas daripada Setiap Kategori dalam Jadual

Dalam senario ini, anda mempunyai jadual dengan banyak rekod, dikategorikan mengikut kategori. Matlamat anda adalah untuk mendapatkan hanya tiga artikel teratas daripada setiap kategori. Semasa anda mencuba penyelesaian menggunakan paparan dan LIMIT, ia menghasilkan bilangan rekod yang terhad.

Untuk menangani cabaran ini, anda perlu menggunakan fungsi analitik, yang kekurangan MySQL. Walau bagaimanapun, anda boleh mencapai kesan yang sama menggunakan pembolehubah:

<code class="sql">SELECT x.*
FROM (
    SELECT t.*,
        CASE 
            WHEN @category != t.category THEN @rownum := 1 
            ELSE @rownum := @rownum + 1 
        END AS rank,
        @category := t.category AS var_category
    FROM TBL_ARTIKUJT t
    JOIN (SELECT @rownum := NULL, @category := '') r
    ORDER BY t.category
) x
WHERE x.rank <= 3</code>
Salin selepas log masuk

Pertanyaan ini menggunakan pembolehubah @rownum dan @category untuk menjejak kedudukan baris dalam kategori. Ia bermula dengan menetapkan kedua-dua pembolehubah kepada nilai NULL/kosong.

Untuk setiap baris dalam jadual (disebut sebagai "t"), ia menyemak sama ada kategori semasa berbeza daripada yang sebelumnya. Jika ia berlaku, ia memberikan 1 kepada @rownum; jika tidak, ia menambah @rownum sebanyak 1. Pada masa yang sama, ia menetapkan kategori semasa kepada @category untuk mengekalkan konteks untuk perbandingan dalam baris berikutnya.

Hasilnya ialah jadual sementara yang menyusun setiap baris dalam kategorinya. Klausa WHERE akhir kemudian menapis jadual sementara ini untuk memaparkan hanya baris dengan pangkat 3 atau lebih rendah.

Ingat untuk melaraskan rujukan lajur dalam klausa SELECT luar (x.*) agar sepadan dengan lajur yang anda mahu dapatkan semula.

Atas ialah kandungan terperinci Bagaimana untuk Memilih 3 Baris Teratas daripada Setiap Kategori dalam Jadual MySQL Tanpa Menggunakan Fungsi Analitik?. 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