PostgreSQL中与FOUND_ROWS()函数等效的函数是什么?

24

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

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中有类似的功能吗?

3个回答

53

PostgreSQL早就有窗口函数,可用于执行许多操作,包括在应用LIMIT之前计算行数。

基于上述示例:

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

2
count(*) OVER() AS total_count会为每一行执行吗?例如,如果有20行,它会被计算20次,还是只计算一次? - tylik
它只会被执行一次。 - Julian Mehnle


-1
SELECT
    n_live_tup     
FROM
    pg_stat_user_tables     
WHERE 
    relname = 'table_Name';

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接