sql - 需要对总和和总和的有效查询

标签 sql oracle sum

我有一个 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_namelocation_nameSUM(销售额)。当我们将 SUM 用作窗口函数并按经理进行分区时,我们因此可以找到每个经理在所有聚合位置的总和。

关于sql - 需要对总和和总和的有效查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56804379/

相关文章:

sql - LEFT JOIN 明显快于 INNER JOIN

php - 如何从数据库中删除过期数据(取决于期间列)

java - "NOT IN"比 <> 慢很多吗?

powershell - 用于查找包含数百万个文件的文件夹的文件大小和文件数的 PowerShell 脚本?

sql - PostgreSQL 整数数组值使用 desc 字符串连接到其他表中的整数

mysql - 循环记录并更新付费状态

sql - 从 Oracle SQL 过程中的表执行 SQL 语句

sql - 从 SQL 中的 SELECT 中选择

arrays - CUDA:如何在 GPU 中将数组的所有元素相加为一个数字?

mysql - 如何隐藏列? MySQL