首頁 >資料庫 >mysql教程 >如何在 SQL 中檢索每個組的前兩個分數?

如何在 SQL 中檢索每個組的前兩個分數?

Barbara Streisand
Barbara Streisand原創
2025-01-03 05:21:37856瀏覽

How to Retrieve the Top Two Scores for Each Group in SQL?

在SQL 中檢索各組的前兩個分數

在關係資料庫中,從大型資料集中提取有意義的資料通常涉及基於記錄進行分組關於具體特徵。從分組集中檢索資料時,通常使用聚合函數來取得每個組內的最高或最低值。但是,如果您需要為每個群組選擇前 N 行怎麼辦?

考慮下表,其中包含學生姓名及其相應的分數:

NAME SCORE
willy 1
willy 2
willy 3
zoe 4
zoe 5
zoe 6

分組的聚合函數僅允許您將獲得每個名字的最高分。要檢索每個學生的前兩名分數,需要不同的方法。

以下查詢使用子查詢來追蹤每個學生在各自組別中的分數排名來實現此目的:

SELECT *
FROM test s
WHERE 
        (
            SELECT COUNT(*) 
            FROM test f
            WHERE f.name = s.name AND 
                  f.score >= s.score
        ) <= 2

分解查詢:

  • 外部查詢,SELECT * FROM test s,從測試表中檢索所有行並將它們別名為s。
  • 括號內的子查詢計算每個學生分數的排名:

    • SELECT COUNT(*) FROM test f:這部分計算測試表中名稱(f. name)與目前行名稱相符的行數(s.name) 且分數(f.score) 大於或等於目前行的分數(s.score)。
  • WHERE子句應用過濾器外部查詢,僅選擇那些排名(由子查詢確定)小於或等於的行2.

輸出:

執行此查詢將傳回以下結果:

NAME SCORE
willy 2
willy 3
zoe 5
zoe 6

此查詢有效檢索前兩者與使用簡單的MAX()聚合相比,可以更全面地了解每個學生的分數。

以上是如何在 SQL 中檢索每個組的前兩個分數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn