【发布时间】:2017-01-13 11:13:33
【问题描述】:
我已经为这个问题设置了一个 sqlfiddle:see here
我在根据代理商的销售额(此处称为 NGR)为代理商计算滑动费率佣金时遇到问题。
佣金表如下:
+----+------------+----------+----------+----------+--------+
| id | tier_min | tier_max | com_rate | dif_rate | agent |
+----+------------+----------+----------+----------+--------+
| 1 | 0 | 100000 | 0.15 | 0.15 | AGENT4 |
| 3 | 100000.001 | 200000 | 0.2 | 0.05 | AGENT4 |
| 4 | 200000.001 | 300000 | 0.25 | 0.05 | AGENT4 |
| 5 | 300000.001 | 500000 | 0.3 | 0.05 | AGENT4 |
| 6 | 500000.001 | 10000000 | 0.35 | 0.05 | AGENT4 |
+----+------------+----------+----------+----------+--------+
例如,如果一个Agent在一个时期有120000美元的销售额,他从0到100 000(15000)获得15%,从阈值100000到200000(20000*20%=4000)获得20%,总计19000
mysqlfiddle中详述的mysql查询详细说明了工作公式:
sum((s.NGR - r.tier_min) * r.dif_rate) as SlideCom
最终查询如下:
+--------+---------+------------+-------+----------+----------+
| Agent | APmonth | FirstMonth | NGR | FIXEDCOM | VARCOM2 |
+--------+---------+------------+-------+----------+----------+
| AGENT1 | 3 | 0 | 16802 | 0 | 2520.327 |
| AGENT2 | 17 | 2 | 7926 | 60 | 1188.975 |
| AGENT3 | 3 | 0 | 6541 | 0 | 981.15 |
| AGENT4 | 4 | 0 | 5513 | 0 | 826.95 |
| AGENT5 | 1 | 0 | 3 | 0 | 0.6 |
| AGENT6 | 1 | 0 | 1 | 0 | 0.21 |
+--------+---------+------------+-------+----------+----------+
我的问题:
- 我无法解决我需要每个代理具有其特定浮动佣金比例的问题,并将佣金表中的代理字段与其对应的代理销售 (NGR) 相关联。我尝试修改添加到的查询
在 r.tier_min
但它不起作用。 在这个问题上的任何帮助都会有很大的帮助,因为我一直在尝试用我有限的 Mysql 技能自己做这件事;)
谢谢!
关于 sql fiddle 问题的完整数据:
CREATE TABLE commissions
(`id` int, `tier_min` double, `tier_max` double, `com_rate` double, `dif_rate` double, `agent` varchar(50))
;
INSERT INTO commissions
(`id`, `tier_min`, `tier_max`, `com_rate`, `dif_rate`, `agent`)
VALUES
(1, 0, 100000, .15, .15, 'AGENT4'),
(3, 100000.001, 200000, .2, .05, 'AGENT4'),
(4, 200000.001, 300000, .25, .05, 'AGENT4'),
(5, 300000.001, 500000, .3, .05, 'AGENT4'),
(6, 500000.001, 10000000, .35, .05, 'AGENT4')
;
CREATE TABLE Online_customer_activity_v2
(`id` int, `Date` datetime, `Customers` varchar(100), `Agent` varchar(100), `Real_Money` int, `_Bonuses` int, `Total_Bets` int, `Total_Win_Loss` int)
;
INSERT INTO Online_customer_activity_v2
(`id`, `Date`, `Customers`, `Agent`, `Real_Money`, `_Bonuses`, `Total_Bets`, `Total_Win_Loss`)
Values
(6813, '2017-01-01 00:00:00', 'KingOfPop', 'AGENT2',101000,1000,4000,100500),
(6814, '2017-01-01 00:00:00', 'Serena77', 'AGENT4',130000,1000,514500,120000),
(6815, '2017-01-01 00:00:00', 'KerymNY', 'AGENT3',376,0,1267.65,375.93),
(6816, '2017-01-01 00:00:00', 'whatthelol', 'AGENT1',130,0,6233.5,119.4993),
(6817, '2017-01-01 00:00:00', 'Noukashi', 'AGENT2',0,0,343.4,49.8),
(6818, '2017-01-01 00:00:00', 'SeaSunBeach', 'AGENT2',30,0,654.5,30),
(6819, '2017-01-01 00:00:00', 'Rizo_090', 'AGENT3',400,0,2675,-1165),
(6820, '2017-01-02 00:00:00', 'Rizo_090', 'AGENT3',7900,1200,140168,30199)
;
CREATE TABLE Online_playerdatabase_v2
(`id` int, `Player` varchar(50), `Agent` varchar(50), `Sign_Up_Date` varchar(12), `First_Deposit_Date` varchar(18))
;
INSERT INTO Online_playerdatabase_v2
(`id`, `Player`, `Agent`, `Sign_Up_Date`, `First_Deposit_Date`)
VALUES
(75, 'KerymNY', 'AGENT3', '2015-02-21', '2015-02-26'),
(137, 'Rizo_090', 'AGENT3', '2015-10-23', '2015-10-23'),
(286, 'KingOfPop', 'AGENT2', '2016-10-03', '2016-12-21'),
(6, 'Noukashi', 'AGENT2', '2016-07-21', '2016-07-22'),
(294, 'Serena77', 'AGENT4', '2016-10-09', '2017-01-02'),
(160, 'whatthelol', 'AGENT1', '2015-03-01', '2015-03-05'),
(360, 'SeaSunBeach', 'AGENT2', '2016-04-18', '2016-04-18')
;
SELECT
a.Agent ,
t2.APmonth ,
COALESCE(t8.FirstMonth , 0) AS FirstMonth ,
TRUNCATE(a.NGR , 0) AS NGR ,
COALESCE(t8.FirstMonth , 0) * 30 AS FIXEDCOM ,
COALESCE(yy.SlideCom , 0) AS VARCOM2 ,
TRUNCATE(
COALESCE(t8.FirstMonth , 0) * 30 + COALESCE(yy.SlideCom , 0) ,
0
) AS totalCOM
FROM
(
SELECT
Online_customer_activity_v2.Agent ,
sum(
Online_customer_activity_v2._Bonuses
) AS BONUS ,
sum(
Online_customer_activity_v2.Total_Win_Loss
) - sum(
Online_customer_activity_v2._Bonuses
) AS NGR
FROM
Online_customer_activity_v2
WHERE
(
Online_customer_activity_v2.Date BETWEEN '2017-01-01'
AND '2017-01-12'
AND Agent <> 'NOAGENT'
)
GROUP BY
Online_customer_activity_v2.Agent
) a
LEFT JOIN(
SELECT
Agent ,
count(First_Deposit_Date) AS FirstMonth
FROM
Online_playerdatabase_v2
WHERE
Online_playerdatabase_v2.First_Deposit_Date BETWEEN '2017-01-01'
AND '2017-01-12'
GROUP BY
Agent
) t8 ON a.Agent = t8.Agent
LEFT JOIN(
SELECT
Online_customer_activity_v2.Agent ,
COUNT(DISTINCT(Customers)) AS APmonth
FROM
Online_customer_activity_v2
WHERE
(
Online_customer_activity_v2.Date BETWEEN '2017-01-01'
AND '2017-01-12'
AND Agent <> 'NOAGENT'
)
AND Online_customer_activity_v2.Total_Bets > 0
GROUP BY
Agent
) AS t2 ON a.Agent = t2.Agent
LEFT JOIN(
SELECT
s.Agent ,
sum((s.NGR - r.tier_min) * r.dif_rate) SlideCom
FROM
(
SELECT
Date ,
Online_customer_activity_v2.Agent ,
sum(
Online_customer_activity_v2.Total_Win_Loss
) - sum(
Online_customer_activity_v2._Bonuses
) AS NGR
FROM
Online_customer_activity_v2
WHERE
Agent <> 'NOAGENT'
AND (Date BETWEEN '2017-01-01'
AND '2017-01-12')
GROUP BY
Agent ,
date_format(Date , '%Y-%m')
) s
JOIN commissions r ON r.tier_min <= s.NGR
GROUP BY
Agent
) yy ON a.Agent = yy.Agent
ORDER BY
NGR DESC;
【问题讨论】:
-
佣金率是固定的还是每个代理的?
-
您好,佣金是每个代理的,所以每个代理可以有不同的比例(例如:AGENT1:从 0 到 100 000 的 10%,AGENT2:从 0 到 100 000 的 15%)
标签: mysql