我有一个SQL查询,以根据以下情况选择金额的总和。
有些经理负责许多地点的销售。所有地点的所有经理的销售金额都存储在同一表中。我要从总表中选择经理名称,地点数量之和及其总金额。
以下是我拥有的SQL。这是工作。但是考虑表中的100k条记录,寻找一种更有效的实现方式。
SELECT
D1.Manager_name,
D1.location_name,
sum(D1.sale_amount) sale_amount,
(select sum(D2.sale_amount) from details D2 where D1.Manager_name = D2.Manager_name) total_amount
FROM details D1
GROUP BY
D1.Manager_name,
D1.location_name;
表数据和预期输出数据
您可以尝试SUM
用作窗口函数来替换相关的子查询:
SELECT
D1.Manager_name,
D1.location_name,
SUM(D1.sale_amount) sale_amount,
SUM(SUM(D1.sale_amount)) OVER (PARTITION BY D1.Manager_name) total_amount
FROM details D1
GROUP BY
D1.Manager_name,
D1.location_name;
这是正在发生的事情的解释。窗口函数总是在最后求值。在窗口函数之后唯一执行的是ORDER BY
子句。另外,在上述情况下,在GROUP BY
求值,仅在中间结果可用的列是Manager_name
,location_name
,和SUM(sale_amount)
。因此,当我们将其SUM
用作窗口功能时,可以按管理器进行分区,因此,我们可以找到所有聚集位置中每个管理器的总和。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句