【发布时间】:2011-08-11 06:21:13
【问题描述】:
考虑一个销售应用程序,其中我们有两个表 SALES 和 INTERNAL_SALES。
- “SALES”表引用了公司外部每个销售人员进行的交易次数。
- “INTERNAL_SALES”表引用了公司内部每个销售人员与其他销售人员进行的交易次数。
销售表: 即使交易为零,每个日期对每个销售人员都有一个条目。
编号 |天 |销售人员 | number_of_transactions 1 | 2011-08-01 |汤姆 | 1000 2 | 2011-08-01 |本 | 500 3 | 2011-08-01 |安妮 | 1500 4 | 2011-08-02 |汤姆 | 0 5 | 2011-08-02 |本 | 800 6 | 2011-08-02 |安妮 | 900 7 | 2011-08-03 |汤姆 | 3000 8 | 2011-08-03 |本 | 0 9 | 2011-08-03 |安妮 | 40INTERNAL_SALES 表: 此表仅记录销售人员之间实际进行的交易。
编号 |天 | sales_person_from | sales_person_to | number_of_transactions 0 | 2011-08-01 |汤姆 |本 | 10 1 | 2011-08-01 |汤姆 |安妮 | 20 2 | 2011-08-01 |本 |汤姆 | 50 3 | 2011-08-03 |安妮 |汤姆 | 30 4 | 2011-08-03 |安妮 |汤姆 | 30现在的问题是计算每个销售人员每天的总交易量。我这样做的方式是:
SELECT day, sales_person, sum(num_transactions) from ( SELECT day, sales_person, number_of_transactions As num_transactions FROM sales; 联盟 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 天,sales_person;这太慢了,而且看起来很丑。我正在寻求更好的解决方案。顺便说一下,Oracle 中使用的数据库,我无法控制数据库,但我可以对它运行查询。
【问题讨论】:
-
这很慢吗?它对我来说一点也不丑。我没有看到更直接的解决方案。没有修改数据库的能力,这里没有什么可以优化的。