我想从下面的表格数据中得到总胜利数,他参加的比赛总数以及每位球员每年的比赛/比赛数量。
+---------+---------+--------+--------+--------+------+
| 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和比率。 有没有其他方法可以做到这一点? 提前谢谢。
答案 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
来获取一个包含单个列中所有player1
,player2
值的表。它还使用条件聚合来计算wins
字段:SUM(player = winner)
将仅对那些player = winner
的记录求和。