【发布时间】:2025-12-12 19:50:01
【问题描述】:
我有这张桌子:
id game points player
---|-----|-------|--------
1 | 1 | 6 | John
2 | 1 | 5 | Adam
3 | 1 | 7 | Brian
4 | 1 | 8 | Alan
5 | 2 | 6 | John
6 | 2 | 2 | Adam
7 | 2 | 4 | Brian
8 | 2 | 3 | Alan
我正在尝试编写一个查询来计算一个人赢得了多少金、银和铜牌。
Alan 的结果应该是:( [gold] = 1, [silver] = 0, [bronze] = 1)
布赖恩应该是:([金] = 0,[银] = 2,[铜] = 0)
我已经可以这样数金牌数了:
SELECT COUNT(*) AS gold
FROM (`myTable` AS t)
WHERE `t`.`player` = 'Alan'
AND `t`.points = (
SELECT MAX(`points`)
FROM `myTable` as tsub
WHERE `tsub`.`game` = `t`.`game`
)
银牌和铜牌似乎要困难得多。
有人有什么想法吗?
谢谢
编辑: 澄清奖牌的授予方式。
金币:授予游戏中得分最高的玩家。
银牌:奖励给比赛中得分第二高的玩家。
铜牌:比赛中得分第三高的玩家。
多个游戏存储在表中。
如果有两名选手获得金牌,则不会获得银牌。 两个最高分打成平手,因此次高分将是第三高分,因此将获得铜牌。
【问题讨论】:
-
金、银、铜各得多少分?
-
出现平局时会发生什么?
-
如果该人在游戏中得分最高,则获得金牌。第二高分 = 银牌,依此类推。关于平局:如果两名球员得分最高,他们都将获得金牌,得分第三高的球员应该获得铜牌。