【发布时间】:2015-04-24 19:51:48
【问题描述】:
我有 2 张桌子 odds 和 matches :
匹配:有 match_id 和 match_date
赔率:有id、timestamp、result、odd_value、user_id、match_id
我有一个查询,从这些表中为每个用户获取以下信息:
- winnings : 每个用户的中奖投注。 (当odds.result = 1时)
- loses : 每个用户的投注失败。(当odds.result != 1 时)
- 积分:每个用户的积分。(odds.odd_value 的总和)每个用户。
- 奖金:对于每连续 5 次获胜,我想为这个变量添加额外的奖金。 (针对每个用户)
如何计算奖金? 我尝试使用此查询,但遇到了一个问题:(您可以在这里查看SQL Fiddle)
计算出的红利并不适合所有用户:
第一个用户:(奖金:13,奖金=2)。
第二个用户:(奖金:8,红利=2)这里的红利应该是1。
第三个用户:(奖金:14,红利=3)这里的红利应该是2。
为什么查询没有正确计算bonus?
select d.user_id,
sum(case when d.result = 1 then 1 else 0 end) as winnings,
sum(case when d.result = 2 then 1 else 0 end) as loses,
sum(case when d.result = 1 then d.odd_value else 0 end) as points,
f.bonus
FROM odds d
INNER JOIN
(
SELECT
user_id,SUM(CASE WHEN F1=5 THEN 1 ELSE 0 END) AS bonus
FROM
(
SELECT
user_id,
CASE WHEN result=1 and @counter<5 THEN @counter:=@counter+1 WHEN result=1 and @counter=5 THEN @counter:=1 ELSE @counter:=0 END AS F1
FROM odds o
cross join (SELECT @counter:=0) AS t
INNER JOIN matches mc on mc.match_id = o.match_id
WHERE MONTH(STR_TO_DATE(mc.match_date, '%Y-%m-%d')) = 2 AND
YEAR(STR_TO_DATE(mc.match_date, '%Y-%m-%d')) = 2015 AND
(YEAR(o.timestamp)=2015 AND MONTH(o.timestamp) = 02)
) Temp
group by user_id
)as f on f.user_id = d.user_id
group by d.user_id
【问题讨论】:
-
"为每个获胜值加 0.5 到奖金" -- 您的查询中没有任何名为
bonus的内容。示例数据和所需结果可能有助于阐明您想要做什么。 -
@Strawberry 它没有丢失!链接有效
-
@GordonLinoff 我添加了一些示例并进行了一些更改,您现在可以检查一下吗
-
对不起,我没有得到奖金的公式,你能否更详细地解释一下如何计算使用 id=100 和用户 id=200 的奖金,这将有很大帮助跨度>
-
@Alex 对于每个
(1,1,1,1,1)连胜我将 1 添加到奖励变量并按 user_id 分组,在此连胜之后我应该将counter(临时变量)设为零以开始计算新的连胜。