使用MySQL作分类二级排序,并对结果进行分类序号排序
建表插入数据
CREATE TABLE IF NOT EXISTS `score` (
`name` varchar(50) DEFAULT NULL,
`clazz` varchar(50) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `score` (`name`, `clazz`) VALUES
('小明', '语文'),
('小红', '数学'),
('小刚', '英语'),
('小明', '英语'),
('小红', '物理'),
('小红', '历史');
确定目标,这是我们要达到的结果:
首先二级排序查询:
select name,clazz from score group by name,clazz order by name asc,clazz asc
得到:
这时需要定义两个变量来存储个数和姓名
SELECT *,IF(@mz=ss.name,@rank:[email protected]+1,@rank:=1) AS rank,@mz:=ss.name
from
(select name,clazz from score group by name,clazz order by name asc,clazz asc) ss,
(SELECT @rank:=0,@mz=NULL) rr
得到:
其中重要的部分
IF(@mz=ss.name,@rank:[email protected]+1,@rank:=1)
如果当前变量mz存储的名字等于当前行数据的名字,rank就自动加1,否则rank重置为1
得到上面得结果后,直接从中提取有用得数据即可得到最终需求结果。
SELECT name,clazz,rank FROM
(
SELECT *,IF(@mz=ss.name,@rank:[email protected]+1,@rank:=1) AS rank,@mz:=ss.name
from
(select name,clazz from score group by name,clazz order by name asc,clazz asc) ss,
(SELECT @rank:=0,@mz=NULL) tt
) result