MYSQL实现统计排名建表预计
CREATE TABLE `players` ( `pid` int(2) NOT NULL, `name` varchar(50) DEFAULT NULL, `age` int(2) DEFAULT NULL, `money` int(10) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
插入数据
INSERT INTO `test`.`players` (`pid`, `name`, `age`, `money`) VALUES ('1', 'Samual', '25', '100'); INSERT INTO `test`.`players` (`pid`, `name`, `age`, `money`) VALUES ('2', 'Vino', '20', '100'); INSERT INTO `test`.`players` (`pid`, `name`, `age`, `money`) VALUES ('3', 'John', '20', '100'); INSERT INTO `test`.`players` (`pid`, `name`, `age`, `money`) VALUES ('4', 'Andy', '22', '100'); INSERT INTO `test`.`players` (`pid`, `name`, `age`, `money`) VALUES ('5', 'Brian', '21', '100'); INSERT INTO `test`.`players` (`pid`, `name`, `age`, `money`) VALUES ('6', 'Dew', '24', '100'); INSERT INTO `test`.`players` (`pid`, `name`, `age`, `money`) VALUES ('7', 'Kris', '25', '100'); INSERT INTO `test`.`players` (`pid`, `name`, `age`, `money`) VALUES ('8', 'William', '26', '100'); INSERT INTO `test`.`players` (`pid`, `name`, `age`, `money`) VALUES ('9', 'George', '23', '100'); INSERT INTO `test`.`players` (`pid`, `name`, `age`, `money`) VALUES ('10', 'Peter', '19', '100'); INSERT INTO `test`.`players` (`pid`, `name`, `age`, `money`) VALUES ('11', 'Tom', '20', '100'); INSERT INTO `test`.`players` (`pid`, `name`, `age`, `money`) VALUES ('12', 'Andre', '20', '100'); INSERT INTO `test`.`players` (`pid`, `name`, `age`, `money`) VALUES ('1', 'Samual', '25', '100'); INSERT INTO `test`.`players` (`pid`, `name`, `age`, `money`) VALUES ('2', 'Vino', '20', '200'); INSERT INTO `test`.`players` (`pid`, `name`, `age`, `money`) VALUES ('3', 'John', '20', '300'); INSERT INTO `test`.`players` (`pid`, `name`, `age`, `money`) VALUES ('4', 'Andy', '22', '400');
按照money 的总金额进行排名
select t.* , case when @preRank = totalmoney then @curRank when @preRank := totalmoney then @curRank := @curRank+1 end as rank from ( SELECT name, sum(money) as totalmoney FROM players GROUP BY name) t,(select @curRank :=0,@preRank:=0)r ORDER BY totalmoney desc