【问题标题】:Postgres count total number of rows under condition, but ignore limit and group byPostgres计算条件下的总行数,但忽略限制和分组依据
【发布时间】:2019-04-24 13:13:09
【问题描述】:

我有一个如下所示的查询:

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 的行。

所以我的问题是:如何计算此查询返回的行数?我怎么能不顾限制地这样做?

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

【问题讨论】:

    标签: sql postgresql


    【解决方案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
    

    【讨论】:

    • 感谢您的快速回答。但是您的第一个解决方案不是只计算 100 行吗?我正在寻找无视限制存在的所有行。例如,如果我有 1000 行,但内部查询包含限制 100,我仍然希望计数返回 1000
    • @Andrew 你可以取消这个限制,我根本看不出使用它的意义
    • 限制是分页,但我看到你的第二个建议实际上实现了我想要的。感谢您的快速响应!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-24
    • 2021-08-31
    • 2014-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    相关资源
    最近更新 更多