PostgreSQL中LIMIT与OFFSET/FETCH FIRST返回行数不符问题
PostgreSQL分页返回行数不符合预期的原因及解决方法
问题原因
你对OFFSET和LIMIT(或FETCH FIRST ... ROW ONLY)的逻辑理解出现了偏差:
OFFSET 10的作用是跳过查询结果的前10行,从第11行开始返回数据,而不是把第10行作为结束位置。LIMIT 20(或FETCH FIRST 20 ROW ONLY)是从跳过前10行的位置开始,再取20行数据。所以最终返回的是第11到第30行的20条数据,这就是实际返回20行的原因。
正确写法
如果你想获取第10到第19行的10条数据(共10条),需要调整OFFSET和LIMIT的数值:
使用LIMIT语法:
select user_id, max(order_ts) as lastorder from production.orders group by user_id order by lastorder desc, user_id desc OFFSET 9 -- 跳过前9行,从第10行开始 limit 10; -- 取10行数据
使用FETCH语法:
select user_id, max(order_ts) as lastorder from production.orders group by user_id order by lastorder desc, user_id desc OFFSET 9 ROWS FETCH FIRST 10 ROW ONLY;
核心要点
OFFSET N:跳过前N行,返回结果从第N+1行开始(行号从1计数)。LIMIT M/FETCH FIRST M ROW ONLY:指定从偏移位置开始,返回M行数据。
内容的提问来源于stack exchange,提问作者Martynova Nadezhda
相关产品推荐
相关产品推荐

