Эквивалент функции FOUND_ROWS () в Postgresql - PullRequest
15 голосов
/ 21 октября 2010

Я делаю некоторую подкачку в своем приложении, возвращая 20 строк из базы данных за раз, используя стандартные ключевые слова OFFSET и LIMIT PostgreSQL.Например, чтобы получить страницу 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 ]

33 голосов
/ 12 марта 2014

PostgreSQL уже некоторое время имеет оконные функции , которые можно использовать для выполнения многих задач, включая подсчет строк до применения LIMIT.

На основе приведенного выше примера:

SELECT stuff,
       count(*) OVER() AS total_count
FROM table
WHERE condition
ORDER BY stuff OFFSET 40 LIMIT 20
1 голос
/ 21 октября 2010

Нет эквивалента.посмотрите на

http://archives.postgresql.org/pgsql-novice/2007-07/msg00108.php

...