mysql8.0已原生支持,本篇文章仅会对mysql5.7及以前的版本
CREATE TABLE g_stud (
id varchar(30) NOT NULL,
username varchar(30) NOT NULL,
userscore int(11),
usersubject varchar(30),
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
insert into g_stud (id, username, userscore, usersubject) values('1001','张三','98','语文');
insert into g_stud (id, username, userscore, usersubject) values('1002','张三','86','数学');
insert into g_stud (id, username, userscore, usersubject) values('1003','张三','86','英语');
insert into g_stud (id, username, userscore, usersubject) values('1004','张三','73','物理');
insert into g_stud (id, username, userscore, usersubject) values('1005','李四','85','语文');
insert into g_stud (id, username, userscore, usersubject) values('1006','李四','92','数学');
insert into g_stud (id, username, userscore, usersubject) values('1007','李四','79','英语');
insert into g_stud (id, username, userscore, usersubject) values('1008','李四','79','物理');
insert into g_stud (id, username, userscore, usersubject) values('1009','王五','68','语文');
insert into g_stud (id, username, userscore, usersubject) values('1010','王五','79','数学');
insert into g_stud (id, username, userscore, usersubject) values('1011','王五','92','英语');
insert into g_stud (id, username, userscore, usersubject) values('1012','王五','92','物理');
SELECT
s.id, s.username, s.userscore, s.usersubject, s.rn
FROM (
SELECT
s.id, s.username, s.userscore, s.usersubject,
(@rownum:=@rownum + 1) rn
FROM
(SELECT id, username, userscore, usersubject FROM g_stud ORDER BY userscore desc, id) s,
(select @rownum:=0) r
) s
SELECT
s.id, s.username, s.userscore, s.usersubject, s.rn
FROM (
SELECT
s.id, s.username, s.userscore, s.usersubject,
if(@sc=s.userscore, @dense_rank:=@dense_rank, @dense_rank:=@dense_rank + 1) rn,
@sc:=s.userscore
FROM
(SELECT id, username, userscore, usersubject FROM g_stud ORDER BY userscore desc, id) s,
(select @sc:=null, @dense_rank:=0) r
) s
SELECT
s.id, s.username, s.userscore, s.usersubject, s.rn
FROM (
SELECT
s.id, s.username, s.userscore, s.usersubject,
@rownum:=@rownum + 1,
if(@sc=s.userscore, @rank:=@rank, @rank:=@rownum) rn,
@sc:=s.userscore
FROM
(SELECT id, username, userscore, usersubject FROM g_stud ORDER BY userscore desc, id) s,
(select @sc:=null, @rownum:=0, @rank:=0) r
) s
SELECT
s.id, s.username, s.userscore, s.usersubject, s.rn
FROM (
SELECT
s.id, s.username, s.userscore, s.usersubject,
if(@uname=s.username, @rownum:=@rownum + 1, @rownum:=1) rn,
@uname:=s.username
FROM
(SELECT id, username, userscore, usersubject FROM g_stud ORDER BY username, userscore desc, id) s,
(select @uname:=null, @rownum:=0) r
) s
SELECT
s.id, s.username, s.userscore, s.usersubject, s.rn
FROM (
SELECT
s.id, s.username, s.userscore, s.usersubject,
if(@uname=s.username, if(@sc=s.userscore, @dense_rank:=@dense_rank, @dense_rank:=@dense_rank + 1), @dense_rank:=1) rn,
@uname:=s.username,
@sc:=s.userscore
FROM
(SELECT id, username, userscore, usersubject FROM g_stud ORDER BY username, userscore desc, id) s,
(select @uname:=null, @sc:=null, @dense_rank:=0) r
) s
SELECT
s.id, s.username, s.userscore, s.usersubject, s.rn
FROM (
SELECT
s.id, s.username, s.userscore, s.usersubject,
if(@uname=s.username, @rownum:=@rownum + 1, @rownum:=1),
if(@sc=s.userscore, @rank:=@rank, @rank:=@rownum) rn,
@uname:=s.username,
@sc:=s.userscore
FROM
(SELECT id, username, userscore, usersubject FROM g_stud ORDER BY username, userscore desc, id) s,
(select @uname:=null, @sc:=null, @rownum:=0, @rank:=0) r
) s