提问者:小点点

如何在mysql中进行分组排名


我有一张表格如下:

Player Game Score
A       X   20
A       Y   15
A       Z   50
B       X   10
B       Y   60
B       Z   40

我需要分组命令他们给出:

Player Game Score Ordered
A       Z   50    1
A       X   20    2
A       Y   15    3
B       Y   60    1
B       Z   40    2
B       X   10    3

共1个答案

匿名用户

CREATE TABLE mytable (
  `Player` VARCHAR(1),
  `Game` VARCHAR(1),
  `Score` INTEGER
);

INSERT INTO mytable
  (`Player`, `Game`, `Score`)
VALUES
  ('A', 'X', '20'),
  ('A', 'Y', '15'),
  ('A', 'Z', '50'),
  ('B', 'X', '10'),
  ('B', 'Y', '60'),
  ('B', 'Z', '40');
SELECT
`Score`
, `Game`
,IF(@name <> `Player`,@rn := 1, @rn := @rn+1) rank_number
,@name := `Player` 'Player'
FROM
(SELECT * FROM mytable ORDER BY Player,Score DESC) t1,(SELECT @name := '') t2,
(SELECT @rn := 0) t3;
Score | Game | rank_number | Player
----: | :--- | ----------: | :-----
   50 | Z    |           1 | A     
   20 | X    |           2 | A     
   15 | Y    |           3 | A     
   60 | Y    |           1 | B     
   40 | Z    |           2 | B     
   10 | X    |           3 | B     

db<;>此处小提琴