【发布时间】:2020-11-27 00:40:59
【问题描述】:
在我的公司,我们使用排行榜来展示我们的销售代理的表现。排行榜显示在 HTML 表格中。排行榜现在只包含特定时期(今天、本周和本月)的销售额。现在我想通过添加那些时期的代理商赚取的佣金来扩大排行榜。我使用以下公式计算我公司销售代理期间的佣金:
4*(x/y)*z
其中 x 是代理当月的总销售量,y 是代理当月的总工作时间,z 是代理在特定时期(一天或一周)内的销售量。因此,为了计算某个时期代理的佣金,必须考虑该月剩余时间的表现。
我现在有两个 MySQL 数据表。一种称为销售,另一种称为小时。 Sales 表中的每个条目代表一个销售,其日期为 (finalized_at),当销售完成时,Hours 表中的每个条目代表代理工作的班次,包含工作小时数和班次发生的日期。表格如下所示:
销售表
+-------+--------------+
| agent | finalized_at |
+-------+--------------+
| John | 01-01-2020 |
+-------+--------------+
| John | 02-01-2020 |
+-------+--------------+
| Mark | 01-01-2020 |
+-------+--------------+
| Peter | 04-01-2020 |
+-------+--------------+
| John | 04-01-2020 |
+-------+--------------+
小时表
+-------+-------+------------+
| agent | hours | date |
+-------+-------+------------+
| John | 1 | 01-01-2020 |
+-------+-------+------------+
| John | 5 | 02-01-2020 |
+-------+-------+------------+
| Mark | 1 | 01-01-2020 |
+-------+-------+------------+
| Peter | 2 | 04-01-2020 |
+-------+-------+------------+
| John | 4 | 04-01-2020 |
+-------+-------+------------+
我现在正在尝试运行一个查询,我可以在其中计算从高到低排序的每个代理赚取的佣金。无需创建新的数据表来保存佣金。因此,如果我想计算 1 月 4 日赚取的佣金,我会得到以下结果:
+-------+------------+
| agent | commission |
+-------+------------+
| Peter | 2 |
+-------+------------+
| John | 1.2 |
+-------+------------+
所以我的问题是:如何构建一个查询,使用两个数据表中的信息来计算特定日期每个代理的佣金。
现在我想出了这个。但这似乎不起作用。如果给我以下错误信息:Reference 'sales' not supported (reference to group function)
SELECT agent,
COUNT(*) as sales,
(4*(SELECT COUNT(*)
FROM Sales Sales2
WHERE Sales2.agent=Sales.agent AND finalized_at BETWEEN '2020-01-01 00:00:00' AND '2020-01-31 23:59:59'))
/
(SELECT SUM(hours)
FROM Hours
WHERE date BETWEEN '2020-01-01 00:00:00' AND '2020-01-31 23:59:59' AND agent=Sales.agent) as sph
FROM Sales
WHERE finalized_at BETWEEN '2020-01-04 00:00:00' AND '2020-01-04 23:59:59'
GROUP BY agent
ORDER by (sph*sales) DESC
【问题讨论】:
-
能否请您包含您当前的查询?