在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
分解查詢:
括號內的子查詢計算每個學生分數的排名:
輸出:
執行此查詢將傳回以下結果:
NAME | SCORE |
---|---|
willy | 2 |
willy | 3 |
zoe | 5 |
zoe | 6 |
此查詢有效檢索前兩者與使用簡單的MAX()聚合相比,可以更全面地了解每個學生的分數。
以上是如何在 SQL 中檢索每個組的前兩個分數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!