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

时间:2018-11-21 21:55:59

标签: 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,如果我要做一个count(*),我只会得到一堆带有1的行。

所以我的问题是:如何计算此查询返回的行数?而我该如何忽略上限?

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

1 个答案:

答案 0 :(得分:1)

您可以使用子查询:

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

编辑:

  

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

是的,使用窗口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