关于我的问题的简化示例,为什么我不能这样做?
select id_number, sum(revenue)
from table A
where sum(revenue)>1000
group by id_number
(如果这引起任何混淆,为什么我不仅可以返回收入超过1000的结果?)
免责声明,我对SQL有点新,但找不到任何关于此的文档。
谢谢,
答案 0 :(得分:1)
这是SQL的设计。通过使用WHERE您过滤源表。语句片段的顺序如同编写。这意味着您希望过滤应用于过滤表的SUM。这意味着您必须使用HAVING子句对已经分组的结果使用过滤器。使用
select id_number, sum(revenue)
from table A
group by id_number
having sum(revenue) > 1000
答案 1 :(得分:0)
简单回答是因为在聚合子句之前评估了WHERE子句。因此,您尝试根据尚不存在的内容进行过滤。但是,您可以通过首先存在来解决该问题。编写子查询,然后从中选择:
WITH RevenueTotals AS (SELECT id_number, sum(revenue) AS Rev_Total
FROM table A
GROUP BY id_number)
SELECT id_number, Rev_Total
FROM RevenueTotals
WHERE Rev_Total > 1000