首頁 > 資料庫 > mysql教程 > 如何在MySQL中選擇每個類別的前兩篇文章?

如何在MySQL中選擇每個類別的前兩篇文章?

Mary-Kate Olsen
發布: 2024-10-29 12:02:02
原創
683 人瀏覽過

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

MySQL 查詢:從每個類別中選擇前兩篇文章

在MySQL 中,通常可以實現從表中提取指定數量的行使用LIMIT 子句。但是,當要求基於分組選擇多行時,需要採用不同的方法。本文解決了一個特定場景,即從表中的每個類別中選擇兩行。

最初,使用者嘗試透過建立一個檢視來限制行,然後使用子查詢來檢索所需的行來實現此目的記錄。然而,這種方法只回傳了兩條記錄。

解決方案在於利用通常所說的視窗函數。 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;
登入後複製

在此修訂後的查詢中:

  • 外部查詢從表TBL_ARTIKUJT (x.*) 中選擇列。
  • 括在括號中的內部查詢計算每個類別中每行的排名。它還定義了兩個使用者定義的變數@rownum和@category,用於追蹤當前行號和類別。
  • WHERE子句過濾結果以僅包含排名為3或更少的行.

這種方法有效地模擬視窗函數來分組並從每個類別中選擇所需的行。如果目的是僅檢索原始列,則可以修改外部查詢以指定特定列名稱而不是 x.*.

以上是如何在MySQL中選擇每個類別的前兩篇文章?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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