有关我的问题的简单示例,为什么我不能这样做?为什么我们不能在分组声明中使用Where子句?
select id_number, sum(revenue)
from table A
where sum(revenue)>1000
group by id_number
(在这种情况下,任何引起混乱,为什么我不能只返回有超过1000的结果收入?)
声明,我有点新的SQL,但找不到任何关于这个的文件。
谢谢,
有关我的问题的简单示例,为什么我不能这样做?为什么我们不能在分组声明中使用Where子句?
select id_number, sum(revenue)
from table A
where sum(revenue)>1000
group by id_number
(在这种情况下,任何引起混乱,为什么我不能只返回有超过1000的结果收入?)
声明,我有点新的SQL,但找不到任何关于这个的文件。
谢谢,
这是设计的SQL。通过使用WHERE您筛选源表。声明片段的顺序如同书面。这意味着你想过滤在过滤表上应用的SUM。这意味着您必须使用HAVING子句对已分组结果使用过滤器。使用
select id_number, sum(revenue)
from table A
group by id_number
having sum(revenue) > 1000
简单的答案是因为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
当条件属于聚合数据时,您需要使用'having'而不是'where'(在group by之后)。 – trincot
您可以使用'where revenue> 1000'来过滤聚合之前的单个行。 –
这是不行的,因为他想要所有他的产品的总和。因此,如果他有五种产品,每种价值999美元,那么他的总价格就会变成0美元,因为它们都没有超过1000美元。 – SandPiper