Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Memilih Baris Teratas setiap Kategori dengan Cekap dalam MySQL Tanpa Fungsi Analitik?

Bagaimana untuk Memilih Baris Teratas setiap Kategori dengan Cekap dalam MySQL Tanpa Fungsi Analitik?

DDD
Lepaskan: 2024-10-28 19:05:29
asal
192 orang telah melayarinya

How to Efficiently Select Top Rows per Category in MySQL Without Analytic Functions?

Memilih Baris Teratas bagi setiap Kategori dalam MySQL

Untuk mendapatkan semula bilangan baris yang terhad daripada setiap kategori dalam jadual, anda boleh menggunakan fungsi analitik . Walau bagaimanapun, MySQL tidak menawarkan fungsi ini secara langsung. Namun begitu, adalah mungkin untuk menirunya menggunakan pembolehubah.

Meniru Fungsi Analitik

Pertanyaan MySQL berikut meniru fungsi fungsi analitik untuk memilih 3 baris teratas bagi setiap kategori :

<code class="mysql">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

Penjelasan

  • Subkueri memilih semua baris daripada jadual TBL_ARTIKUJT dan memulakan dua pembolehubah sesi, @rownum dan @category, untuk menjejaki kedudukan dan kategori semasa.
  • kedudukan yang diberikan kepada setiap baris menunjukkan kedudukannya dalam kategorinya. Apabila kategori baharu ditemui, kedudukan ditetapkan semula kepada 1.
  • var_category digunakan untuk menyimpan kategori bagi setiap baris.
  • Pernyataan SELECT luar menapis subkueri, memilih hanya baris dengan kedudukan kurang daripada atau sama dengan 3.

Kaedah ini membolehkan anda melaksanakan fungsi yang diingini tanpa bergantung pada fungsi analitik, yang tidak disokong oleh MySQL.

Atas ialah kandungan terperinci Bagaimana untuk Memilih Baris Teratas setiap Kategori dengan Cekap dalam MySQL Tanpa 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan