我有这张桌子:
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`
)
银牌和铜牌似乎要困难得多。
有人有什么想法吗?
谢谢
编辑:澄清奖牌的授予方式。
金牌:比赛中得分最高的玩家。
银牌:授予比赛中得分第二高的玩家。
铜牌:比赛中得分第三高的玩家。
多个游戏存储在表中。
如果有两名选手获得金牌,则不会授予银牌。两个最高分打成平手,因此下一个最高分将是第三高分,因此将获得铜牌。