數據庫分組後獲取每個分組的前N條記錄
您的數據庫數據按分組組織,您需要提取每個分組的前N條記錄。為此,您可以採用以下策略:
UNION ALL 方法:
使用 UNION ALL 運算符組合每個分組的前N條記錄。例如,如果您有兩個分組,並希望為每個分組檢索前兩條記錄,您可以使用:
<code class="language-sql">( SELECT * FROM mytable WHERE `group` = 1 ORDER BY age DESC LIMIT 2 ) UNION ALL ( SELECT * FROM mytable WHERE `group` = 2 ORDER BY age DESC LIMIT 2 )</code>
行號方法:
使用以下查詢為每條記錄生成行號:
<code class="language-sql">SELECT person, `group`, age, (@num:=IF(@group = `group`, @num +1, IF(@group := `group`, 1, 1))) row_number FROM test t CROSS JOIN (SELECT @num:=0, @group:=NULL) c ORDER BY `Group`, Age DESC, person</code>
此查詢為其分組中的每條記錄分配一個行號。然後,您可以過濾結果以僅檢索行號小於或等於 N 的記錄:
<code class="language-sql">SELECT person, `group`, age FROM ( ... (上述查询) ... ) AS x WHERE x.row_number <= N</code>
其他方法:
文中提到的 xaprb 文章提供了實現此結果的其他方法,包括:
最佳方法取決於您的特定數據庫系統和性能要求。
以上是如何檢索資料庫中每組的前 N 筆記錄?的詳細內容。更多資訊請關注PHP中文網其他相關文章!