Rumah  >  Artikel  >  pangkalan data  >  Bagaimana Mendapatkan 3 Baris Teratas Dari Setiap Kategori dalam MySQL Tanpa Fungsi Analitik?

Bagaimana Mendapatkan 3 Baris Teratas Dari Setiap Kategori dalam MySQL Tanpa Fungsi Analitik?

Susan Sarandon
Susan Sarandonasal
2024-10-30 10:34:27804semak imbas

How to Get the Top 3 Rows From Each Category in MySQL Without Analytic Functions?

Memilih 3 Baris Teratas daripada Setiap Kategori dalam MySql

Dalam jadual dengan banyak rekod dan lajur kategori, tugas timbul untuk mendapatkan semula hanya dua artikel teratas dari setiap kategori. Untuk mencapai matlamat ini, pengguna mula-mula cuba membuat had paparan, mengehadkan bilangan baris yang diambil kepada dua setiap kategori. Walau bagaimanapun, pendekatan ini terbukti tidak mencukupi.

Memahami Fungsi Analitik

Hasil yang diinginkan memerlukan penggunaan fungsi analitik/windowing/ranking. Fungsi ini, yang tidak disokong oleh MySQL secara semulajadi, boleh dianggarkan menggunakan pembolehubah.

Meniru Fungsi Analitik

Kod berikut meniru fungsi analitik:

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

Pembolehubah @rownum dan @category digunakan untuk menjejaki nombor baris dan kategori semasa, masing-masing. Dengan menggunakan pembolehubah ini, kedudukan setiap baris dalam kategorinya ditentukan dan mereka dalam 3 kedudukan teratas dipilih.

Menyesuaikan Set Keputusan

Untuk memastikan bahawa hanya lajur yang dikehendaki dikembalikan, nyatakan lajur yang diperlukan dalam pernyataan SELECT, seperti yang ditunjukkan di bawah:

SELECT x.articleid, x.title
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

Atas ialah kandungan terperinci Bagaimana Mendapatkan 3 Baris Teratas Dari Setiap Kategori dalam MySQL Tanpa Fungsi Analitik?. 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