SQL中窗口函数的LIMIT限制逻辑_如何分页显示

窗口函数不支持在OVER()中使用LIMIT,正确分页需先用ROW_NUMBER()等生成序号,再在外层WHERE中筛选范围;ORDER BY必须包含唯一字段(如主键)以保证分页稳定性。窗口函数本身不支持 LIMIT,别在 OVER() 里写 LIMIT窗口函数(如 ROW_NUMBER()、RANK())是计算值的,不是筛选行的。你在 OVER() 子句里加 LIMIT 会直接报错,比如 PostgreSQL 报 syntax error at or near "LIMIT",MySQL 8.0 也一样不认。真正想分页,得把窗口函数结果当成子查询或 CTE 的一部分,再在外层用 LIMIT + OFFSET(或 FETCH FIRST)控制输出行数。错误写法:SELECT *, ROW_NUMBER() OVER (ORDER BY id) AS rn FROM t LIMIT 10 ------ 这只限制最终结果,但 ROW_NUMBER() 仍基于全表计算,性能差且语义不清正确思路:先算好序号,再筛指定范围,比如第 2 页(每页 10 条)就取 rn BETWEEN 11 AND 20注意:窗口函数执行顺序早于 LIMIT,所以外层过滤必须靠 WHERE 或 HAVING,不能指望 LIMIT 帮你"截断"窗口逻辑用 ROW_NUMBER() 实现稳定分页,ORDER BY 必须唯一如果只按 created_at 排序,而多行时间相同,ROW_NUMBER() 会任意分配不同序号,导致同一页数据每次查出来不一致,甚至漏行、重复。解决办法是在 ORDER BY 里补一个唯一字段兜底,通常是主键: RedClaw 百度推出的手机端万能AI Agent助手

相关推荐
默_笙1 天前
🍙 给每个请求过安检:FastAPI 是怎么把校验写进类型注解的
python
qq_426003961 天前
启动playwright录制codegen生成自动化测试脚本
python·自动化
虎头金猫1 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
长沙三为智能科技1 天前
家政小程序开发从0到上线:五阶段交付流程与验收清单
python
此时不提桶,更待何时1 天前
01-06-A-JVM排查实战详解
java·jvm
伞伞悦读1 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
这个DBA有点耶1 天前
MVCC深入:Read View、版本链与快照读——InnoDB并发控制的内核
数据库·mysql·架构
DBA_G1 天前
从地面到云霄:GBase数据库在民航三大场景的落地实践
数据库
自由能燃气设备1 天前
商用全预混低氮冷凝锅炉免费方案vs付费方案对比+选型避坑指南
大数据·数据库·人工智能
只睡四小时1 天前
Canvas 弹道联机实战:700 行 + 固定时间步长
python·websocket·html5·游戏开发·canvas