我有一个看起来像这样的查询:
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/