在Postgresql中等效FOUND_ROWS()函数

时间:2010-10-21 05:52:05

标签: postgresql count paging

我正在我的应用程序中进行一些分页,使用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中是否存在等效内容?

2 个答案:

答案 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)