MySql 获取 ID 的总数

标签 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

谢谢。

最佳答案

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

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 函数中使用任何表达式,这将导致 bool 值,所以我们得到通过将玩家 ID 与获胜者列进行比较,计算每个用户获胜的比赛数,最后一部分我计算了百分比

关于MySql 获取 ID 的总数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23719156/

相关文章:

mysql - SQL:计算列并显示总结果

sql - 为什么在运行 MS Access 查询时会收到 “Enter Parameter Value”?

php - 如何在两列中不重复计数?

mysql - 更新查询需要很长时间才能运行

Mysql 带有连接的子查询

php - Laravel 5 "Trying to get property of non-object"传递多个连接表值查看时出错

php - 内部连接 ​​2 个具有相同列名的表

mysql - 对数据库记录使用唯一的日期时间或时间戳是个坏主意吗?

php - 加入 - 语法错误

apache-spark - Spark-Python : Select rows and dates