我有一个与游戏结果相关的表,有超过 300 000 条记录,其中每一行都保存玩家攻击。这是简化的表格示例。我保留攻击 ID、日期、攻击完成时间、唯一玩家 ID、玩家姓名(可由玩家更改)和结果(布尔值、胜利或失败)。
攻击ID | 日期 | 玩家id | 参赛者姓名 | 结果 |
---|---|---|---|---|
1 | 2024-03-09 00:00:00 | 1 | 猫 | 1 |
2 | 2024-03-10 00:00:00 | 1 | 熊猫 | 1 |
3 | 2024-03-11 00:00:00 | 2 | 狗 | 0 |
4 | 2024-03-12 00:00:00 | 3 | 狼 | 1 |
我想展示 10 名最佳进攻球员,我的查询如下所示:
SELECT
player_id as id,
player_name as name,
count(attack_id) as attacks,
sum(result) as victory,
( count(attack_id) - sum(result) ) as defeat,
( sum(result) - ( count(attack_id) - sum(result) ) ) as difference
FROM `my_table_name`
GROUP BY player_id
ORDER BY difference DESC
LIMIT 10
查询计算玩家的胜负以及胜负差值。这里的问题与玩家姓名有关。玩家可以在一些攻击后更改名称,但此查询返回第一个player_name(与player_id相关),而不是最后一个(当前)。
此查询的结果(根据我的示例,应该是 panda,而不是 cat,因为它是最后一个玩家攻击名称):
ID | 姓名 | 攻击 | 胜利 | 打败 | 不同之处 |
---|---|---|---|---|---|
1 | 猫 | 2 | 2 | 0 | 2 |
3 | 狼 | 1 | 1 | 0 | 1 |
2 | 狗 | 1 | 0 | 1 | -1 |
我该如何解决这个问题?