我知道我的订单需要很多计算,但我希望你会把它视为一种挑战。
我的名为matchup
的表格如下:
注意:每列的数据表(players
除外)为decimal(5,2)
+------------------------------------------------------------------+
|players player1 player2 player3 player4 player5 player6 player7|
+------------------------------------------------------------------+
|player1 NULL 47.01 52.22 47.59 47.79 43.67 47.61 |
|player2 51.34 NULL 51.76 49.29 48.22 44.46 48.16 |
|player3 46.00 46.33 NULL 41.90 40.46 41.17 39.66 |
|player4 50.34 48.39 55.65 NULL 50.47 44.89 48.48 |
|player5 50.23 49.25 56.76 46.76 NULL 47.27 47.61 |
|player6 54.96 53.77 56.92 53.33 51.36 NULL 49.07 |
|player7 51.03 50.00 58.12 49.12 50.20 48.55 NULL |
+------------------------------------------------------------------+
此表显示每位玩家对其他玩家的概率(以%表示)。该表应如下所示:例如,player1有47.01%的机会赢得对玩家2的胜利。玩家反对自己的概率在这里没有意义,在计算赔率时应该省略数据。
想象一下,你是一个团队的经理,你知道你的对手团队将是由1-5名球员组成。玩家姓名将在以下变量$a
,$b
,$c
,$d
,$e
中给出。例如,它可以是$a='player2';
$b='player4';
$c='player7'
(在这种情况下,我们的对手团队中只有3名玩家)。
根据这些信息,我们的目标是确定哪些是面对敌方队伍的最佳球员,以及让他们有机会再次赢得另一支球队。
在这个例子中,每个球员赢得对手球队的概率由下式给出:
player1 = mean(47.01; 47.59; 47.61) = 47.40
player2 = cannot be chosen (because it is already chosen by the other team)
player3 = mean(46.33; 41.90; 39.66) = 42.63
player4 = cannot be chosen
player5 = mean(49.25; 46.74; 47.71) = 47.87
player6 = mean(53.77; 53.33; 49.07) = 52.06
player7 = cannot be chosen
此结果应作为关联数组预先设置,其值按降序排列:
$result = array(
'player6' => '52.06',
'player5' => '47.87',
'player1' => '47.40',
'player3' => '42.63'
);
请注意,此表只是一个摘录,代码应考虑到该表可能涉及7个以上的玩家。
任何帮助都会得到满足!
答案 0 :(得分:0)
我将您的表格结构更改为
桌面播放器:
PlayerID
选手姓名
...
表格小组:
TeamID
队名
...
表TeamMembership
TeamID
PlayerID
表格概率
Player1ID
Player2ID
Probability1Beats2
然后,假设团队ID 1包含玩家ID 2,4和7,就像你的例子一样,你可以这样做:
SELECT Pl.PlayerName, SUM(Pr.Probability1Beats2)/COUNT(DISTINCT(Pr.Player2ID)) AS Avg
FROM (Team T LEFT JOIN TeamMembership M ON T.TeamID = M.TeamID), Probability Pr, Player Pl
WHERE Pr.Player2ID = M.PlayerID
AND M.TeamID = 1
AND Pr.Player1ID NOT IN (
SELECT PlayerID FROM TeamMembership M2
WHERE M2.TeamID = 1
)
AND Pr.Player1ID = Pl.PlayerID
GROUP BY Pr.Player1ID
ORDER BY Avg DESC
查询可能并不完美,但它可以为您提供帮助。