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

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

Susan Sarandon
發布: 2024-10-30 10:34:27
原創
870 人瀏覽過

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

從MySql 中的每個類別中選擇前3 行

在一個包含大量記錄和一個類別列的表中,任務是檢索僅每個類別的前兩篇文章。為了實現此目的,使用者最初嘗試建立視圖 limitrows,將檢索到的行數限制為每個類別兩行。然而,這種方法被證明是不夠的。

理解分析函數

想要的結果需要使用分析/視窗/排名函數。這些 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
登入後複製

變數@rownum和@category分別用於追蹤行號和目前類別。透過使用這些變量,確定每一行在其類別中的排名,並選擇排名前 3 名的行。

自訂結果集

以確保僅傳回所需的資料列,在SELECT 語句中指定所需的資料列,如下所示:

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

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

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