我有一个问题,我count(*)
将在过滤不同的行之前返回行数。
这是我的查询的简化版本。请注意,我将从表中提取许多其他数据,因此group by
不会返回相同的结果,因为我可能必须按 10 列进行分组。它的工作方式m
是映射映射q
,c
因此kl
可以有多个对q.id
. 我只想要一个。
SELECT distinct on (q.id) count(*) over() as full_count
from q, c, kl, m
where c.id = m.chapter_id
and q.id = m.question_id
and q.active = 1
and c.class_id = m.class_id
and kl.id = m.class_id
order by q.id asc
如果我运行它,我会得到full_count = 11210
它只返回 9137 行。如果我在没有 的情况下运行它distinct on (q.id)
,则 (q.id) 上的 distinct 确实是行数。
因此,计数函数似乎无权访问过滤后的行。我该如何解决这个问题?我需要重新考虑我的方法吗?