【问题标题】:How can I use postgresql count filter with limit without subquery如何在没有子查询的情况下使用具有限制的 postgresql 计数过滤器
【发布时间】:2022-01-21 04:08:59
【问题描述】:

我有这个问题

SELECT 
    count(*) filter(where condition) as cond_cnt
FROM table
LIMIT 100

但是计数发生在所有桌子上,根本不尊重 LIMIT

如果我使用子查询:

SELECT 
    count(*) filter(where condition) as cond_cnt
FROM
(SELECT *
 FROM table
 LIMIT 100
) as sub

然后它工作正常。我错过了什么?

【问题讨论】:

  • 请记住,在查询执行中,LIMIT 是最后运行的东西。考虑到这一点,在您的第一个查询中,“限制 100”没有任何影响,因为它总是返回一个值。但是,在第二个查询中,您首先将数据集限制为 100 行。
  • 是的,这似乎是对的,但还有办法避免子查询吗?
  • 无序限制很少有意义。
  • 排序不属于本题
  • 技术替代方案是 CTE。但是您的逻辑确实 需要第二次查询。即使是自然语言伪代码,from the first 100 records of a table (a query) count those that meet a condition (another query)

标签: sql postgresql


【解决方案1】:

但是计数发生在所有桌子上,根本不尊重LIMIT
我错过了什么?

您在SELECT 查询中缺少明确定义的事件顺序。 LIMIT 发生在 应用窗口函数之后。所以你需要一个子查询或 CTE 来首先应用LIMIT

见:

【讨论】:

    猜你喜欢
    • 2015-02-16
    • 2018-08-20
    • 2018-06-27
    • 1970-01-01
    • 1970-01-01
    • 2015-05-26
    • 2019-03-26
    • 2012-08-22
    • 1970-01-01
    相关资源
    最近更新 更多