需要有效查询总和和

Gok*_*ath 2 sql oracle sum

我有一个sql查询,以根据以下情况选择金额的总和。

有些经理负责许多地点的销售。所有地点的所有经理的销售金额都存储在同一表中。我想从总表中选择经理名称,地点数量之和及其总金额。

以下是我拥有的SQL。这是工作。但是考虑表中的10万条记录,寻找更有效的实现方式。

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;
Run Code Online (Sandbox Code Playgroud)

表数据和预期输出数据

Tim*_*sen 5

您可以尝试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;
Run Code Online (Sandbox Code Playgroud)

这是正在发生的事情的解释。窗口函数总是在最后求值。在窗口函数之后唯一执行的是ORDER BY子句。另外,在上述情况下,在GROUP BY求值,仅在中间结果可用的列是Manager_namelocation_name,和SUM(sale_amount)。因此,当我们将其SUM用作窗口功能时,按管理者划分分区,因此,我们可以找到所有汇总位置中每个管理者的总和。