很抱歉没有那么明确的标题。
我有列的表,
ID, p1_ID, p2_ID, winner
我希望在哪里找到使用单个查询获胜的百分比。
我可以通过以下查询得到用户的总赢数,我也尝试获取总计数,但是它返回null,
SELECT count(winner) as ranking, winner, @togal_games
FROM `gscore`, (select count(*) from `gscore` where p1_ID= winner or p2_ID = winner) as togal_games
group by winner
order by ranking desc
结果:
5 234234 NULL
3 453453 NULL
1 345344 NULL
有人可以确定如何解决或在哪里寻找改进我的SQL查询吗?
编辑:添加了示例数据
ID P1_ID P2_ID WINNER
1 234234 345344 234234
2 234234 345344 345344
3 234234 453453 234234
4 123123 234234 234234
5 234234 123123 234234
6 453453 345344 453453
7 345344 234234 234234
8 234234 453453 453453
9 453453 234234 453453
感谢。
答案 0 :(得分:2)
根据您的样本数据集,您可以这样做
select pid ,count(id) total_played,
sum(pid= WINNER) `wins`,
(sum(pid= WINNER) / count(id)) * 100 percent
from (
select `ID`, `P1_ID` pID, `WINNER` from t
union all
select `ID`, `P2_ID` pID, `WINNER` from t
) tt
group by pID
order by total_played DESC
您可以使用union all
将所有玩家放在一列中,就像我在上面所做的一样,然后您可以按照玩家对查询进行分组,这样count(id)
就会为您提供每个玩家的比赛计数玩家,我已经在mysql中计算了sum(pid= WINNER)
的胜利匹配,如果你在sum函数中使用任何表达式,这将导致boolean,所以我们通过比较玩家ID和获胜者列来获得每个用户赢得的匹配数,以及最后一部分我已计算出百分比