【问题标题】:MySql get total count of an IDMySql获取ID的总数
【发布时间】:2014-05-18 06:20:50
【问题描述】:

抱歉,标题不太清楚。

我有带列的表格,

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

谢谢。

【问题讨论】:

  • 请提供一些样本数据集以及您的预期结果集
  • 我不清楚您要计算的“总游戏数”。获胜者所玩的总游戏数,或他玩家对抗该组件的总游戏数,或总游戏数或......?
  • 获胜者玩过的游戏总数

标签: mysql count subquery


【解决方案1】:

根据您的示例数据集,您可以这样做

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) 将为您提供每位玩家的比赛次数,我有如果您在 sum 函数中使用任何表达式,则在 mysql 中通过sum(pid= WINNER) 计算获胜匹配,这将导致布尔值,因此我们通过将玩家 ID 与获胜者列进行比较来获得每个用户获胜的匹配计数,最后一部分我计算了百分比

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-27
    • 2012-09-05
    • 2014-08-07
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 2013-01-23
    相关资源
    最近更新 更多