sql - Postgres 计算条件下的总行数,但忽略限制和分组依据

标签 sql postgresql

我有一个看起来像这样的查询:

SELECT t1.id, t1.name, t1.description
FROM t1
LEFT JOIN t2 ON (t2.id = t1.id)
WHERE condition
GROUP BY t1.id
LIMIT 100

除了返回指定的列(id、名称、描述)之外,我还想计算超过限制的满足此查询的总行数。问题是,由于 GROUP BY,如果我要进行计数 (*),我只会得到一堆带有 1 的行。

所以我的问题是:如何计算此查询返回的行数?我怎么能不考虑限制呢?

是否可以在单个查询中同时返回行数和列数据?还是我需要使用两个查询?

最佳答案

你可以使用子查询:

SELECT COUNT(*)
FROM (
  SELECT t1.id
  FROM t1
  LEFT JOIN t2 ON (t2.id = t1.id)
  WHERE condition
  GROUP BY t1.id) sub

编辑:

Also is it possible to return both the row count AND the column data in a single query? Or would I need to use two queries?

是的,使用窗口化 COUNT:

SELECT t1.id, COUNT(*) OVER() AS num_of_r0ws
FROM t1
LEFT JOIN t2 ON (t2.id = t1.id)
WHERE condition
GROUP BY t1.id

关于sql - Postgres 计算条件下的总行数,但忽略限制和分组依据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53421016/

相关文章:

xml - 在 PostgreSQL 中从文件插入 XML

sql - 删除重复的源到目的地(例如,对于 2 个不同的条目(行),德里到孟买和孟买到德里,输出应该是一个)

SQL Server varchar(50)和varchar(128)的性能差异

mysql - 查询为空 SQL=

postgresql - 是否有可能在死锁或序列化错误期间两个事务都回滚?

postgresql - 用 yum 安装 pgAdmin4

mysql - 选择表中行对应的所有数据(SQL)

sql - 当我显示数据并仅获取 hh :mm:ss am format? 时,是否可以从 Oracle SQL DATE 隐藏 dd-mon-yyyy 组件

ruby-on-rails - Hartl Rails 教程第 2 章, "hello world"未显示在 http ://localhost:3000 中

java - 使用 jooq 在 postgres 中自动生成主键