gpt4 book ai didi

sql - 嵌套查询——寻找更好的解决方案

转载 作者:行者123 更新时间:2023-12-01 10:09:25 25 4
gpt4 key购买 nike

考虑一个销售应用程序,我们有两个表 SALES 和 INTERNAL_SALES。

  • 表“SALES”引用了公司外部每个销售人员进行的交易数量。
  • 表“INTERNAL_SALES”引用了公司内部每个销售人员与其他销售人员进行的交易数量。

销售表:即使交易为零,每个日期都有一个针对每个销售人员的条目。

id |  day          | sales_person | number_of_transactions1  | 2011-08-01    | Tom          | 10002  | 2011-08-01    | Ben          | 5003  | 2011-08-01    | Anne         | 15004  | 2011-08-02    | Tom          | 05  | 2011-08-02    | Ben          | 8006  | 2011-08-02    | Anne         | 9007  | 2011-08-03    | Tom          | 30008  | 2011-08-03    | Ben          | 09  | 2011-08-03    | Anne         | 40

INTERNAL_SALES 表:此表仅记录销售人员之间实际进行的交易。

id | day        | sales_person_from | sales_person_to | number_of_transactions 0 | 2011-08-01 | Tom               | Ben             | 10 1 | 2011-08-01 | Tom               | Anne            | 20 2 | 2011-08-01 | Ben               | Tom             | 50 3 | 2011-08-03 | Anne              | Tom             | 30 4 | 2011-08-03 | Anne              | Tom             | 30

现在的问题是计算每个销售人员每天的交易总额。我这样做的方式是:

SELECT day, sales_person, sum(num_transactions) from(  SELECT day, sales_person, number_of_transactions As num_transactions FROM sales;  UNION  SELECT day, sales_person_from As sales_person, sum(number_of_transactions) As num_transactions FROM internal_sales GROUP BY day, sales_person_from;)GROUP BY day, sales_person;

这太慢了而且看起来很丑。我正在寻求更好的解决方案。顺便说一下,数据库在 Oracle 中使用,我无法控制数据库,除非我可以对它运行查询。

最佳答案

不需要聚合两次,联合运算符通常会进行隐式唯一排序,同样,在您的情况下也没有必要。

SELECT day, sales_person, sum(num_transactions) from
(
SELECT day, sales_person, number_of_transactions As num_transactions FROM sales;
UNION ALL
SELECT day, sales_person_from, number_of_transactions FROM internal_sales;
)
GROUP BY day, sales_person;

删除中间聚合和唯一排序应该会有所帮助。

关于sql - 嵌套查询——寻找更好的解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7021635/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com