我在应用程序中进行一些分页,使用PostgreSQL的标准偏移量和限制关键字一次从数据库返回20行.例如,要获取第1页,请执行以下操作:

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

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

SELECT COUNT(*) FROM table WHERE condition

但是如果有大量的行,那么这不是一个最佳的解决方案.我注意到MySQL有一个非常有用的函数,名为find_ROWS(),它正是我想要的:

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

PostgreSQL中是否有类似的版本?

推荐答案

PostgreSQL现在已经有window functions个了,可以用来做很多事情,包括在应用限制之前计算行数.

基于上述示例:

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

Postgresql相关问答推荐

将几个左连接合并为一个

Keycloak和PostgreSQL

计算两个子查询之间的差异

在Axum 0.5中,如何在一个请求处理程序中同时使用数据库和路径解析?

PostgreSQL无效语法

正在加载 pgAdmin 4 v7.4...同时打开 pgAdmin

如何在 kubernetes 中安全地重启 postgresql 容器?

无法使用golang在postgresql中使用自定义类型插入/更新数据

使用 JDBC 连接到 PostgreSql 的本地实例

在 Ubuntu 11.04 服务器中启用对 postgresql 的 PHP 支持

如何为 JavaEE 应用程序中的 PostgreSQL 热备设置配置连接故障转移?

在psql中,为什么有些命令没有效果?

Rails 3:在 Postgres 支持的 ActiveRecord 中使用 json 作为列类型时出现迁移错误

为什么PostgresQL查询性能随时间下降,但在重建索引时恢复

如何使用 psql 命令列出、创建、使用和判断数据库?

在 Postgresql 中按窗口函数结果过滤

PG::ConnectionBad FATAL:role "Myname" does not exist

PostgreSQL 使用 UUID 与文本作为主键

判断 PostgreSQL 中的角色是否设置了密码

SQL:子查询的列太多