我正在我的应用程序中进行一些分页,使用PostgreSQL的标准OFFSET和LIMIT关键字一次从数据库返回20行。例如,要获取第1页页面:
SELECT stuff FROM table WHERE condition ORDER BY stuff OFFSET 0 LIMIT 20
应用程序的要求是我们还向用户显示记录总数。所以,显然,我可以通过发出一个单独的查询来获得总数:
SELECT COUNT(*) FROM table WHERE condition
但如果有大量行,那么这不是最佳解决方案。我注意到MySQL有一个非常有用的函数FOUND_ROWS(),它正是我正在寻找的东西:
http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function%5Ffound-rows
PostgreSQL中是否存在等效内容?
答案 0 :(得分:32)
PostgreSQL现在已经有window functions了一段时间,它可以用来做很多事情,包括在应用LIMIT之前计算行数。
基于上面的例子:
SELECT stuff,
count(*) OVER() AS total_count
FROM table
WHERE condition
ORDER BY stuff OFFSET 40 LIMIT 20
答案 1 :(得分:1)