SQL:聚合后如何过滤?

SQL:聚合后如何过滤?,sql,select,aggregation,Sql,Select,Aggregation,删除不希望聚合的值非常容易 例如: SELECT department, SUM(sales) as "Total sales" FROM order_details GROUP BY department HAVING SUM(sales) > 1000; 这将从总和中排除所有值小于或等于1000的销售 但是在聚合之后如何过滤呢 例如,WHERE(“总销售额”>15000) 编辑:讽刺的是,我只包括了的销售总额>1000以避免混淆所需的查询类型;因为我实际上对从求和中排除项目不感兴趣,

删除不希望聚合的值非常容易

例如:

SELECT department, SUM(sales) as "Total sales"
FROM order_details
GROUP BY department
HAVING SUM(sales) > 1000;
这将从总和中排除所有值小于或等于1000的销售

但是在聚合之后如何过滤呢

例如,
WHERE(“总销售额”>15000)


编辑:讽刺的是,我只包括了
的销售总额>1000以避免混淆所需的查询类型;因为我实际上对从求和中排除项目不感兴趣,只对返回的结果感兴趣!谢谢,尽管有点困惑

您可以通过在临时表中选择总和,然后从临时表中选择,分两步进行:

选择部门,合计(销售额)作为总销售额
进入#临时
从订单详情
按部门分组
总销售额>1000
选择部门、总销售额
从#temp
其中总销售额>15000
升降台#温度

如果要筛选值小于1000的销售,正确的查询是

SELECT department, sales
FROM order_details
WHERE sales > 1000
如果要进行聚合,并且仅将总和保持在15000以上,则需要执行以下查询:

SELECT department, SUM(sales) as TotalSales
FROM order_details
WHERE sales > 1000
GROUP BY department
HAVING SUM(sales) > 15000

你的问题实际上是在做你想做的,而不是你在问题中表达的。如果要排除值小于1000的所有销售,应使用
WHERE sales>1000
。但是如果
的SUM(sales)>1000
实际上是在聚合之后进行过滤的

编写子查询并添加另一个
选择原始查询上方的
是多余的

请参阅以获得澄清

#Query1

SELECT department, SUM(sales) as Total
FROM order_details
GROUP BY department
HAVING Total > 40;

#Query 2

SELECT department, SUM(sales) as Total
FROM order_details
GROUP BY department
HAVING  SUM(sales) > 40;

#Query 3

SELECT department, SUM(sales) as Total
FROM order_details
WHERE sales > 40
GROUP BY department;

#Query 1 and 2 are the same, filtering after aggregation
#Query 3 is filtering before aggregation

你能提供样品记录吗?你的问题很简单,但你的陈述令人困惑。不理解你的问题。你已经在做你要求的事情了。查询筛选聚合小于1000的所有部门。你能重新措辞吗?重新措辞:对返回值进行筛选。查询将排除小于X的结果。可能是更有效的方法,因为这样做似乎有点浪费,随后将被排除。这正是不应该做的一个例子。在第一个查询中将1000替换为15000,您将得到相同的结果。@jurgenreza您是对的,当然,这是一个冗余过滤器。不过,我是用他的提问来回答他的问题的(有点夸张)。不过,根据他的描述,他可以在实际查询中按不同的字段进行过滤,而这种方法可以实现这一点。