Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Memilih Dua Artikel Teratas daripada Setiap Kategori dalam MySQL?

Bagaimana untuk Memilih Dua Artikel Teratas daripada Setiap Kategori dalam MySQL?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-29 12:02:02633semak imbas

How to Select the Top Two Articles from Each Category in MySQL?

MySQL Query: Memilih Dua Artikel Teratas daripada Setiap Kategori

Dalam MySQL, mengekstrak bilangan baris tertentu daripada jadual selalunya dicapai menggunakan klausa LIMIT. Walau bagaimanapun, apabila keperluan adalah untuk memilih berbilang baris berdasarkan pengumpulan, pendekatan yang berbeza diperlukan. Artikel ini menangani senario tertentu di mana dua baris akan dipilih daripada setiap kategori dalam jadual.

Pada asalnya, pengguna cuba mencapai ini dengan mencipta pandangan untuk mengehadkan baris dan seterusnya menggunakan subkueri untuk mendapatkan semula yang diingini rekod. Walau bagaimanapun, pendekatan ini menyebabkan hanya dua jumlah rekod dikembalikan.

Penyelesaian terletak pada penggunaan apa yang biasanya dirujuk sebagai fungsi windowing. MySQL tidak menyokong fungsi windowing secara asli, tetapi mungkin untuk meniru fungsinya menggunakan pembolehubah yang ditentukan pengguna seperti berikut:

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;

Dalam pertanyaan yang disemak ini:

  • Pertanyaan luar memilih lajur daripada jadual TBL_ARTIKUJT (x.*).
  • Pertanyaan dalaman, dibalut dalam kurungan, mengira kedudukan setiap baris dalam setiap kategori. Ia juga mentakrifkan dua pembolehubah yang ditentukan pengguna, @rownum dan @category, yang digunakan untuk menjejaki nombor baris dan kategori semasa.
  • Klausa WHERE menapis keputusan untuk memasukkan hanya baris dengan pangkat 3 atau kurang .

Pendekatan ini secara berkesan mencontohi fungsi tetingkap untuk mengumpulkan dan memilih baris yang dikehendaki daripada setiap kategori. Jika niatnya adalah untuk mendapatkan semula lajur asal sahaja, pertanyaan luar boleh diubah suai untuk menentukan nama lajur tertentu dan bukannya x.*.

Atas ialah kandungan terperinci Bagaimana untuk Memilih Dua Artikel Teratas daripada Setiap Kategori dalam MySQL?. 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