MySQL高效獲取每個分組的前N行數據
問題描述:
在數據庫查詢中,您可能需要為每個數據分組僅檢索前N行數據。例如,您的數據集可能包含按年份和ID分組的多行信息。如果您想顯示每個ID的前五條評分最高的記錄,則需要實現一種方法來將結果限制為所需數量。
解決方案:
在MySQL 8或更高版本中,您可以使用ROW_NUMBER、RANK或DENSE_RANK函數來實現此目的。您選擇的具體函數取決於“前N行”的確切定義以及如何處理並列情況。以下是這些函數生成的結果的細分:
示例:
以下查詢使用ROW_NUMBER函數返回每個ID的前5行,按評分降序排序:
<code class="language-sql">SELECT year, id, rate FROM ( SELECT year, id, rate, ROW_NUMBER() OVER (PARTITION BY id ORDER BY rate DESC) AS rank_num FROM h WHERE year BETWEEN 2000 AND 2009 ) AS subquery WHERE rank_num <= 5;</code>
輸出:
year | id | rate |
---|---|---|
2006 | p01 | 8.0 |
2003 | p01 | 7.4 |
2008 | p01 | 6.8 |
2001 | p01 | 5.9 |
2007 | p01 | 5.3 |
2001 | p02 | 12.5 |
2004 | p02 | 12.4 |
2002 | p02 | 12.2 |
2003 | p02 | 10.3 |
2000 | p02 | 8.7 |
通過使用這些函數,您可以有效地將結果限制為每個分組的前N行,並確保數據的所需排序。
以上是如何在 MySQL 中僅檢索每組的前 N 行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!