MySQL中每两列的组数据计算

时间:2017-02-10 09:01:42

标签: mysql

我想从下面的表格数据中得到总胜利数,他参加的比赛总数以及每位球员每年的比赛/比赛数量。

+---------+---------+--------+--------+--------+------+
| player1 | player2 | score1 | score2 | winner | year |
+---------+---------+--------+--------+--------+------+
|  100000 |  100125 |      4 |      0 | 100000 | 2016 |
|  100125 |  100126 |      4 |      0 | 100125 | 2016 |
|  100130 |  100000 |      0 |      4 | 100000 | 2017 |
|  100125 |  100130 |      4 |      0 | 100125 | 2017 |
+---------+---------+--------+--------+--------+------+

因此,询问的查询通常应该返回如下行:

+--------+---------------+------+-------+------+
| player | total_matches | wins | ratio | year |
+--------+---------------+------+-------+------+
| 100000 |             1 |    1 | 1     | 2016 |
| 100000 |             1 |    1 | 1     | 2017 |
| 100125 |             2 |    1 | 0.5   | 2016 |
| 100125 |             1 |    1 | 1     | 2017 |
| 100126 |             1 |    0 | 0     | 2016 |
| 100130 |             2 |    0 | 0     | 2017 |
+--------+---------------+------+-------+------+

如果我按胜利者和年份分组,我可以很容易地获得每年的胜利但是我无法获得total_matches和比率。 有没有其他方法可以做到这一点? 提前谢谢。

1 个答案:

答案 0 :(得分:0)

试试这个:

SELECT player, 
       COUNT(*) AS total_matches, 
       SUM(player = winner) AS wins,
       SUM(player = winner) / COUNT(*) AS ratio,
       `year`
FROM (
   SELECT player1 AS player, winner, `year`
   FROM mytable

   UNION ALL 

   SELECT player2, winner, `year`
   FROM mytable) AS t
GROUP BY player, `year`   

该查询使用UNION ALL来获取一个包含单个列中所有player1player2值的表。它还使用条件聚合来计算wins字段:SUM(player = winner)将仅对那些player = winner的记录求和。

Demo here