2017-06-13 69 views
-2

我已经整理了一个小型数据库,以跟踪一些我和我的同事在足球赛季放置的一些累积投注。现在我需要编写一个函数来计算每个选择的奖金。关键表是选择功能的关键字段为赔率和result_id,其中1的result_id是胜利。赌注存储在赌注表中。以下是有两个bet_id 1获胜者的选择表,所以得到的方程将是((@stake * 1.40)* 1.40)。有没有使用游标或基于集合的方法来产生这个值的方法?有条件地遍历列中的每个值

bet_id punter_id team_id odds result_id ground_id 
1  1   24  1.40 1   1 
1  1   48  1.60 2   1 
1  1   89  1.60 2   1 
1  2   8  1.40 1   1 
1  2   11  1.60 2   1 
1  2   107  1.60 2   1 
+0

应该不需要光标就可以做到这一点。什么将赌注加入选择表? Bet_id? – Leonidas199x

+3

这是一个开始的好地方。 http://spaghettidba.com/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/ –

+1

是的,我根本不明白你的问题。 –

回答

0

假设你加入的bet_id

CREATE TABLE bet (bet_id int NOT NULL PRIMARY KEY, 
        stake float NOT NULL); -- or some floating point number type 

要乘我们用下面的关系组:

log(a * b * c) = log(a) + log(b) + log(c) 

也因此乘法

a * b * c = exp(log(a * b * c)) = exp(sum(log(.))) 

要计算因素

bet_id | odds_factor 
1  | 1.40 * 1.40 = 1.96 

我们使用公用表表达式CTE在此查询

WITH factor(bet_id, odds_factor) AS 
    (SELECT bet_id, exp(sum(log(odds))) 
    FROM selection 
    WHERE result_id = 1 -- only winning odds in the grouping 
    GROUP BY bet_id) 
SELECT b.bet_id, 
     b.stake, 
     f.odds_factor, 
     b.stake * f.odds_factor AS "total_odds" 
FROM bet b 
INNER JOIN factor f 
ON b.bet_id = f.bet_id 
-- ORDER BY b.bet_id -- optional ordering for readability 

应该得到(未经测试)

bet_id | stake | odds_factor | total_odds 
1  | 10.0 | 1.96  | 19.6 
0

认为这很简单,只要:

SELECT  B.BET_ID, 
      S.PUNTER_ID, 
      ((B.stake * S.odds) * S.odds) 
FROM  BET   AS B 
INNER JOIN SELECTION AS S ON B.Bet_id = S.Bet_id 
WHERE  S.result_id = 1