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

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

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-29 12:02:02632瀏覽

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