MySql获取ID的总数

时间:2014-05-18 06:20:50

标签: mysql count subquery

很抱歉没有那么明确的标题。

我有列的表,

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

感谢。

1 个答案:

答案 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

Demo

您可以使用union all将所有玩家放在一列中,就像我在上面所做的一样,然后您可以按照玩家对查询进行分组,这样count(id)就会为您提供每个玩家的比赛计数玩家,我已经在mysql中计算了sum(pid= WINNER)的胜利匹配,如果你在sum函数中使用任何表达式,这将导致boolean,所以我们通过比较玩家ID和获胜者列来获得每个用户赢得的匹配数,以及最后一部分我已计算出百分比