mysql - 如何修改这个mysql查询以显示获胜百分比?

标签 mysql

下面这个查询:

SELECT member, count(*) Wins 
FROM (SELECT player2_name as member from results 
WHERE player1_id = 2 AND player1_result = 'W' AND community_id = 16 
UNION ALL SELECT player1_name FROM results WHERE player2_id = 2
AND player2_result = 'W' AND community_id = 16) AS T 
group by member ORDER BY Wins DESC 

产生如下结果:

+---------+-----------+
| member  |    Wins   |
+---------+-----------+
| Player 1|     4     |
| Player 2|     3     |
| Player 3|     3     |
+---------+-------------+

为了使数据更有用(因为每个玩家可能玩了不同数量的游戏),我想显示一个额外的列“获胜百分比”。

-> 这是基于每个玩家玩/赢的游戏数量。 - 如果在 MySQL 中无法直接输出 %,那么小数就可以了,即 0.76

如何修改现有查询以生成如下输出:

+--------+------------+----------------+----- ----+ |成员(member)|胜利 |玩过的游戏 |赢率% | +--------+------------+----------------+---------+ |玩家1| 4 | 8 | 0.50 | 0.50 |玩家2| 3 | 3 | 1.00 | |玩家3| 3 | 5 | 0.60 | 0.60 +--------+------------+----------------+---------+

我希望添加一些内容:

SELECT GamesPlayed FROM (SELECT player1_name as member from results 
WHERE player1_id = 2 AND community_id = 16 
UNION ALL SELECT player2_name FROM results WHERE player2_id = 2
AND community_id = 16) AS GP

然后在第 1 行:

 SELECT member, count(*) Wins, round(sum(wins/GamesPlayed(1),2) WinPercentage

但这只是我对它如何工作的一个非常粗略的充满希望的猜测。

最新测试数据: enter image description here

最佳答案

类似这样的吗?

更新的查询

SELECT 
    T.member
    , count(*) Wins 
    , total.gamesPlayed
    , count(*)/total.gamesPlayed as winPercentage
FROM 
    (
        SELECT 
            player2_name as member 
        from results 
        WHERE 
            player1_id = 2 
            AND player1_result = 'W' 
            AND community_id = 16 
        UNION ALL 
        SELECT 
            player1_name 
        FROM results 
            WHERE player2_id = 2
            AND player2_result = 'W' 
            AND community_id = 16
    ) AS T 
    ,   (
            select
                u.member
                , sum(u.gamesPlayed) as gamesPlayed
            from
                (
                    select
                        player2_name as member
                        , count(*) gamesPlayed
                    from results
                    where
                        player1_id = 2 
                        AND community_id = 16 
                    group  by player2_name
                    union
                    select
                        player1_name as member
                        , count(*) gamesPlayed
                    from results
                    where
                        player2_id = 2 
                        AND community_id = 16 
                    group  by player2_name
                ) as u /* union of two */
            group by member 
    ) as total
where
    T.member = total.member
group by T.member 
ORDER BY Wins DESC 

关于mysql - 如何修改这个mysql查询以显示获胜百分比?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41364787/

相关文章:

MySQL关系数据库外键

php - 从两个表中返回相同的值

mysql - 按性别计算年龄范围

php - 从 Drupal 设置文件中获取数据库名称的正则表达式?

php - 从 MySQL 数据库中检索图像

MySQL 数据库设计帮助

mysql - 获取行集中一行的排名

java - HTTP POST 到 MySQL 数据库 AyncTask 错误。强制关闭

php - 检查MySQL字段值是否等于某个数字

mysql - Wordpress - 建立数据库连接时出错