【发布时间】: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