從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中文網其他相關文章!