2010-10-21 14 views
10

Estoy realizando una búsqueda en mi aplicación, devolviendo 20 filas de la base de datos a la vez utilizando las palabras clave OFFSET y LIMIT estándar de PostgreSQL. Por ejemplo, para obtener página 1 página:Equivalente de la función FOUND_ROWS() en Postgresql

SELECT stuff FROM table WHERE condition ORDER BY stuff OFFSET 0 LIMIT 20 

Es un requisito de la aplicación que también se muestra al usuario el número total de registros. Así que, obviamente, no puedo obtener el total mediante la emisión de una consulta independiente:

SELECT COUNT(*) FROM table WHERE condition 

Pero si hay un gran número de filas, entonces esto no es una solución óptima. Noto que MySQL tiene una función muy útil llamada FOUND_ROWS() que hace exactamente lo que estoy buscando:

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

¿Hay un equivalente en PostgreSQL?

Respuesta

24

PostgreSQL ha tenido window functions desde hace un tiempo que puede ser utilizado para hacer muchas cosas, incluyendo filas de conteo antes de aplicar LÍMITE.

Basado en el ejemplo anterior:

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