2010-10-21 52 views
10

我在应用程序中做了一些分页,每次从数据库返回20行,使用PostgreSQL的标准OFFSET和LIMIT关键字。例如,要获得第1页:PostgreSQL中FOUND_ROWS()函数的等效

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中的相同呢?

回答

24

PostgreSQL有过window functions现在一段时间可以用来施加限制之前,要做的事情很多,包括计数行。

基于上面的例子:

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