在Postgresql中等效FOUND_ROWS()函数

Mik*_*ain 17 postgresql paging count

我正在我的应用程序中进行一些分页,使用PostgreSQL的标准OFFSET和LIMIT关键字一次从数据库返回20行.例如,要获取第1页页面:

SELECT stuff FROM table WHERE condition ORDER BY stuff OFFSET 0 LIMIT 20
Run Code Online (Sandbox Code Playgroud)

我们还向用户显示记录总数,这是应用程序的要求.所以,显然,我可以通过发出一个单独的查询来获得总数:

SELECT COUNT(*) FROM table WHERE condition
Run Code Online (Sandbox Code Playgroud)

但是如果存在大量行,那么这不是最佳解决方案.我注意到MySQL有一个非常有用的函数FOUND_ROWS(),它正是我正在寻找的:

http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function%5Ffound-rows

PostgreSQL中有相同的东西吗?

And*_*ing 36

PostgreSQL现在有一段时间的窗口函数可以用来做很多事情,包括在应用LIMIT之前计算行数.

基于上面的例子:

SELECT stuff,
       count(*) OVER() AS total_count
FROM table
WHERE condition
ORDER BY stuff OFFSET 40 LIMIT 20
Run Code Online (Sandbox Code Playgroud)

  • 会为每一行执行 `count(*) OVER() AS total_count` 吗?例如,如果我们有 20 行,这是否意味着它会被计算 20 次,还是只计算一次? (2认同)