首頁 > 資料庫 > mysql教程 > 如何在不使用分析函數的情況下從 MySQL 表中的每個類別中選擇前 3 行?

如何在不使用分析函數的情況下從 MySQL 表中的每個類別中選擇前 3 行?

Linda Hamilton
發布: 2024-10-29 14:58:02
原創
470 人瀏覽過

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

MySQL 查詢:從表中的每個類別中選擇前3 行

在這種情況下,您有一個包含大量記錄的表,按類別分類。您的目標是僅檢索每個類別中的前三篇文章。當您嘗試使用視圖和 LIMIT 的解決方案時,它會導致記錄數量有限。

為了應對這個挑戰,有必要利用 MySQL 所缺乏的分析函數。但是,您可以使用變數來實現類似的效果:

<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>
登入後複製

此查詢使用變數 @rownum 和 @category 來追蹤類別內的行排名。它首先將兩個變數設為 NULL/空值。

對於表中的每一行(別名“t”),它檢查當前類別是否與前一個類別不同。如果是,則將 1 分配給 @rownum;否則,它會將 @rownum 加 1。同時,它將當前類別分配給 @category,以維護後續行中比較的上下文。

結果是一個臨時表,對類別中的每一行進行排名。然後,最後的 WHERE 子句會過濾此臨時表,以僅顯示排名為 3 或更低的行。

請記住調整外部 SELECT 子句 (x.*) 中的欄位參考以符合您想要的列檢索。

以上是如何在不使用分析函數的情況下從 MySQL 表中的每個類別中選擇前 3 行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板