0

我有这张桌子:

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`
)

银牌和铜牌似乎要困难得多。

有人有什么想法吗?

谢谢

编辑:澄清奖牌的授予方式。

金牌:比赛中得分最高的玩家。

银牌:授予比赛中得分第二高的玩家。

铜牌:比赛中得分第三高的玩家。

多个游戏存储在表中。

如果有两名选手获得金牌,则不会授予银牌。两个最高分打成平手,因此下一个最高分将是第三高分,因此将获得铜牌。

4

2 回答 2

0

这会有所帮助

如果需要,更新您的奖牌标准

select 
name, 
(SELECT count(*) FROM myTable g where g.points > 5 and g.name=myTable.name) as gold,
(SELECT count(*) FROM myTable g where g.points > 2 and g.points <= 5 and g.name=myTable.name) as silver,
(SELECT count(*) FROM myTable g where g.points <= 2 and g.name=myTable.name) as gold
from myTable
group by name
于 2012-08-10T13:39:49.063 回答
0

考虑这个例子......

 DROP TABLE IF EXISTS my_table;

 CREATE TABLE my_table 
 (game INT NOT NULL
 ,points INT NOT NULL
 ,player VARCHAR(12) NOT NULL
 ,PRIMARY KEY(game,player)
 );

 INSERT INTO my_table VALUES
 (1,6,'John'),
 (1,5,'Adam'),
 (1,7,'Brian'),
 (1,8,'Alan'),
 (2,6,'John'),
 (2,2,'Adam'),
 (2,4,'Brian'),
 (2,3,'Alan');

 SELECT player
      , SUM(rank=1) gold
      , SUM(rank=2) silver
      , SUM(rank=3) bronze 
   FROM
      (
        SELECT x.*
             , COUNT(*) rank 
          FROM my_table x 
          JOIN my_table y 
            ON y.game = x.game 
           AND y.points >= x.points 
         GROUP 
            BY game
             , player
      ) a
  GROUP 
     BY player;
 +--------+------+--------+--------+
 | player | gold | silver | bronze |
 +--------+------+--------+--------+
 | Adam   |    0 |      0 |      0 |
 | Alan   |    1 |      0 |      1 |
 | Brian  |    0 |      2 |      0 |
 | John   |    1 |      0 |      1 |
 +--------+------+--------+--------+
于 2013-03-19T16:15:45.283 回答