2016-11-14 26 views
0

我正在爲遊戲製作一個網站作爲業餘愛好,我想爲每個冠軍添加一個贏得百分比。我追蹤我的數據庫中的每一場比賽,結果欄可以是0或1,表示失敗或獲勝。我正在使用MySql。我希望我的結果表是這樣的:每個ID的字段出現百分比

ChampID | Wins | Loss | Percentage 
12  1  1  50% 
13  2  0  100% 

與我匹配表看起來像這樣:

MatchID | ChampID | PlayerID | MatchOutcome 
1   12  1231  1 
2   12  1414  0 
3   13  1341  1 
4   13  1512  1 

因此,與ID 12的冠軍將有贏率50%,而13將有100%。

我一直在嘗試工會和加入,但我無法讓他們正確,這是最接近我來了。

SELECT 
(SELECT COUNT(*) FROM Matches WHERE (MatchOutcome LIKE "0")) AS Loss, 
(SELECT COUNT(*) FROM Matches WHERE (MatchOutcome LIKE "1")) AS Win, 
(SELECT (Win/(Win+Loss))*100) AS Percentage 

這種方法似乎是最有希望的,因爲我也希望能夠通過PlayerID進一步排序。

感謝您的時間

回答

2

只是做一些簡單的數學來做到這一點。沒有理由讓創意與聯接和子查詢:

SELECT sum(matchoutcome)/count(matchid) FROM Matches where PlayerID = 12; 

或者,在列表中的每個玩家:

SELECT playerID, sum(matchoutcome)/count(matchid) FROM Matches GROUP BY playerID; 

你可以做你轉換爲百分比也在這裏:

SELECT playerID, (sum(matchoutcome)/count(matchid))*100 FROM Matches GROUP BY playerID; 

要在單獨的列中獲得勝利和損失:

SELECT playerID, 
    sum(matchOutcome) as Wins, 
    Count(matchid) - sum(matchOutcome) as Losses, 
    (sum(matchoutcome)/count(matchid))*100 
FROM Matches 
GROUP BY playerID; 
+0

公平和簡單的解決方案。它可以和group一起使用來推廣。它有趣的看到人們downvoting明確的答案 – Acewin

+0

哦,是啊...我不知道downvotes。也許我在那裏瞎搞或誤解了這個問題,但看起來很簡單。我唯一想要添加的就是'IF()'或'CASE'語句是另一種技術,但由於matchout是一個布爾值,所以不需要它們。 – JNevill

+0

嗨,謝謝你的回答!正是我在找的東西,欣賞努力!經過測試,一切正常! – Djinnes