【发布时间】:2017-12-12 16:32:17
【问题描述】:
所以,我的问题是:我在一家销售公司工作,正在开发一个应用程序,使用 MS Access 2007 作为前端,MySQL 5.6 Server 作为后端。我正在尝试生成一个计算每个代表的佣金数据的视图。
我的 DDL 如下:
CREATE TABLE emp_employees
(`id` int, `tsr_code` int, `first_name` varchar(9), `location_id` int)
;
INSERT INTO emp_employees
(`id`, `tsr_code`, `first_name`, `location_id`)
VALUES
(47, 829, 'ELIZABETH', 6),
(199, 818, 'ERIC', 6),
(1642, 301, 'JACK', 4),
(2346, 619, 'SHANNA', 5),
(2386, 899, 'MICHAEL', 3),
(2490, 590, 'KARRIE', 4),
(2642, 386, 'MINDI', 3),
(2914, 615, 'REMELL', 3),
(3150, 025, 'TEAL', 3),
(3156, 609, 'JESSICA', 5)
;
CREATE TABLE x_recap
(`recap_id` int, `sale_date` datetime, `location_id` int, `tsr_id` int, `ver_id` int, `tsr_cpo` decimal(10,4), `ver_cpo` decimal(10,4))
;
INSERT INTO x_recap
(`recap_id`, `sale_date`, `location_id`, `tsr_id`, `ver_id`, `tsr_cpo`, `ver_cpo`)
VALUES
(423670, '2017-01-23 08:15:44', 5, 3156, 2346, 9.0000, 1.5000),
(423671, '2017-01-23 08:16:03', 6, 199, 47, 13.5000, 1.5000),
(423672, '2017-01-23 08:16:41', 3, 3150, 2914, 4.7500, 0),
(423673, '2017-01-23 08:17:08', 3, 2386, 2642, 8.7500, 1.50),
(423674, '2017-01-23 08:17:28', 5, 2346, 2346, 5.7500, 0.50)
;
想要的结果:
+------------+-------------+------------+----------+----------+
| sale_date | location_id | first_name | tsr_comm | ver_comm |
+------------+-------------+------------+----------+----------+
| 2017-01-23 | 3 | MICHAEL | 8.7500 | 0.0000 |
| 2017-01-23 | 3 | MINDI | 0.0000 | 1.5000 |
| 2017-01-23 | 3 | REMELL | 0.0000 | 0.0000 |
| 2017-01-23 | 3 | TEAL | 4.7500 | 0.0000 |
| 2017-01-23 | 5 | JESSICA | 9.0000 | 0.0000 |
| 2017-01-23 | 5 | SHANNA | 5.7500 | 2.0000 |
| 2017-01-23 | 6 | ELIZABETH | 0.0000 | 1.5000 |
| 2017-01-23 | 6 | ERIC | 13.5000 | 0.0000 |
+------------+-------------+------------+----------+----------+
编辑 (2017-12-13):请注意员工 2346“Shana”如何以 1.50 美元的价格进行一次验证 (recap_id=423670)。她还有一个自我验证销售 (recap_id=423674),另外还有 0.50 美元的验证佣金和 5.75 美元的销售。这些必须单独跟踪。
正如您从 Fiddle 中看到的那样,我可以使用 Union 查询让数据以我想要的方式显示。当我在“回顾”中加载 4100 条员工记录和 236K 销售条目时,问题就出现了。阅读后,我了解到我的查询现在需要很长时间(大约 30 秒),因为 MySQL 正在从联合创建一个临时表,然后从未索引的临时表执行外部查询。当我为每个联合添加 WHERE 子句时,时间会大大减少。
我觉得我必须缺少一些东西:一个特殊的内部连接,一些东西。尽管我每天都使用 MySQL,但我对 MySQL 还是很陌生(我的工作通常只需要一些 concat() 和偶尔的内部连接)。我对任何事情都持开放态度。 如果结果证明这是最好的选择,我不会部分重新设计我的表格(也许还有一点社区帮助)。
目标: 对于 emp_employees 表中的每个员工,我需要获取 tsr_cpo 字段的总和 (sum(RECAP.tsr_cpo) 其中 EMP.id = RECAP .tsr_id)。我还需要为验证销售的任何人获取 ver_cpo 的总和 (sum(RECAP.ver_cpo) where EMP.id = RECAP.ver_id)。
【问题讨论】:
-
@Strawberry 感谢您的编辑!现在看起来干净多了。我很啰嗦,并试图保持简短。
标签: mysql sql join ms-access-2007 mysql-5.6