首先,我有一个基于体育博彩的数据库。我有一张名为“ MATCHES”的表格(id_match / sport_id / League_id / team /竞争对手/ result)。
我正在使用的查询如下:
SELECT leagues.name,
COUNT(matches.League_id) AS times_bet,
COUNT(case when matches.result = 'W' then 1 else null end) AS times_won,
AVG (matches.result = 'W')*100 AS winrate,
nations.name as nation,
sports.name as sport
FROM matches,leagues,sports,nations
WHERE matches.League_id=leagues.id and leagues.Sport_id=sports.id and
leagues.Nation_id=nations.id
GROUP BY matches.League_id
以及我生成的结果:
+---------------------------------------------------------+
| name | times_bet | times_won | winrate | nation | sport |
+---------------------------------------------------------+
| xxx | 100 | 65 | 65% | xxxxx | xxx |
| aaa | 70 | 49 | 70% | bbbbb | ccc |
| yyy | 65 | 50 | 77% | bbbbb | ccc |
| eee | 7 | 7 | 100% | ppppp | hhh |
当我尝试找出哪种联赛更有利时,问题就来了。
如果我按winrate和time_bets排序查询,则最有利的联赛将是最后一个联赛,那不是我想要的。
我想找出是否有任何方法可以将预测的数量与获胜率进行比较,从而能够确定哪个联赛是最有利的。
具有50个预测和80%胜率的联盟比具有5个预测和100%胜率的联盟更有利。这就是我的意思。
我将给出一个我希望看到的图形示例:
+---------------------------------------------------------+
| name | times_bet | times_won | winrate | nation | sport |
+---------------------------------------------------------+
| yyy | 65 | 50 | 77% | bbbbb | ccc |
| aaa | 70 | 49 | 70% | bbbbb | ccc |
| xxx | 100 | 65 | 65% | xxxxx | xxx |
| eee | 7 | 7 | 100% | ppppp | hhh |
如果有人知道有什么办法,我将不胜感激。预先感谢
答案 0 :(得分:0)
在查询末尾添加以下内容:
ORDER BY times_bet*winrate DESC
按表达式的降序对输出进行排序。
答案 1 :(得分:0)
“更优惠”到底是什么意思?
例如,如果我们假设如果一个球员在该联盟的所有投注中平均分配自己想投注的金额,那么所有投注的赔率都完全相同,那么最有利的是获胜率最高的那个。
但是,如果玩家在每次下注中都投入固定金额,那么情况就会改变。
例如,如果我们假设在所有投注中获胜的赔率是2.00,那么您下注时每投注1美元,您赢回2美元,那么如果球员在每个联赛中为每场比赛投入1美元,则更优惠的联赛因为他本来会是yyy,因为他本可以拿回2 * 50 = 100美元,下注总额为65美元,所以他将从那个联盟中获利35美元。尽管联盟eee的获胜率更高,但下注却少得多,因此他从7美元的总赌注中可以得到2 * 7 = 14美元,而总利润仅为7美元。
在示例中,我假设获胜预测的平均下注赔率是一个固定数字,并且每个联赛都相同。显然不是这样,您应该找到每个联赛获胜预测的平均赔率,例如,如果一个联赛有三个获胜预测,赔率分别为2.00、3.00和4.00,则应取平均值(2 + 3 + 4)/ 3 = 3并使用该值。
类似这样的东西:
WITH VTE AS(
SELECT *
FROM (VALUES(111,100,1,1,10,5000),
(111,200,1,2,10,NULL),
(111,300,1,3,5 ,NULL),
(111,400,1,4,8 ,NULL),
(222,100,2,1,20,6000),
(222,200,2,2,15,NULL),
(222,300,2,3,12,NULL),
(222,400,2,4,10,NULL))V(SKU,Shop,WeekNum,ShopPrioirty,Replen,OpeningStock))
SELECT V.SKU,
V.Shop,
V.WeekNum,
V.ShopPrioirty,
V.Replen,
V.OpeningStock,
FIRST_VALUE(V.OpeningStock) OVER (PARTITION BY V.SKU ORDER BY V.ShopPrioirty,V.WeekNum ROWS UNBOUNDED PRECEDING) -
ISNULL(SUM(V.Replen) OVER (PARTITION BY V.SKU ORDER BY V.ShopPrioirty,V.WeekNum ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING),0) AS CurrentStock
FROM VTE V;