首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

MySQL 分組分頁:按字段分組後每組取前 N 條的單條 SQL 實現

     編輯:程式設計疑難解答

需求

表:id, group_name。按 group_name 分組,每頁顯示 2 組,組內數據全顯示。

單條 SQL 方案

SELECT * FROM `table`
WHERE `group_name` IN (
    SELECT `group_name` FROM `table`
    GROUP BY `group_name`
    ORDER BY `group_name`
    LIMIT 0, 2  -- 第1頁:前2組;第2頁:LIMIT 2, 2
)
ORDER BY `group_name`, `id`;

原理解析

  1. 子查詢先按分組字段去重排序並分頁,得到當前頁需要的組名集合
  2. 主查詢用 IN 篩選屬於這些組的所有行
  3. 最終按分組字段、id 排序輸出

適用場景

分組數較少(幾千以內),子查詢性能可接受。大數據量建議應用層分兩步查詢或用窗口函數(MySQL 8.0+ ROW_NUMBER() OVER (PARTITION BY group_name ORDER BY id))。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved