mysql分组排序加序号(不⽤存储过程,就简简单单sql语句哦)做前端好长时间了,好久没动sql了。在追⼀个喜欢的⼥孩,做测试的,有这么个需求求助与本屌丝,机会难得,开始折腾起来,配置mysql,建库,建表....
⼀建表
CREATE TABLE `my_test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`parent_code` varchar(255) DEFAULT NULL,
`code` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8DEFAULT CHARSET=utf8;
⼆模拟数据
INSERT INTO `my_test` (  `parent_code`, `code`) VALUES ('01', '001');
INSERT INTO `my_test` (  `parent_code`, `code`) VALUES ('01', '002');
INSERT INTO `my_test` (  `parent_code`, `code`) VALUES ('02', '001');
INSERT INTO `my_test` (  `parent_code`, `code`) VALUES ('01', '003');
INSERT INTO `my_test` (  `parent_code`, `code`) VALUES ('02', '002');
INSERT INTO `my_test` (  `parent_code`, `code`) VALUES ('03', '001');
INSERT INTO `my_test` (  `parent_code`, `code`) VALUES ('04', '001');
查询结果如下:
三不分组加序号
select  (@i :=@i+1) rownum,my_test.*from    my_test , (SELECT@i :=0) AS a  group by  parent_code ,code ,id  order by  parent_code
结果如下:
解释⼀下这个地⽅⽤了@i变量刚开始的让 @i=0  然后每查询⼀条让  @i+=1
四分组排序加序号了
刚开始的没思路,就度娘了,有⽤存储过程创建临时表插⼊临时表实现的,还有⽤存储过程游标实现,对于好久没动sql,⽽且之前也没写过mysql 查询的淫来说好复杂,
好囧,赶脚要再我⼥神⾯前丢⼈了,but 多谢上天眷顾,查看我⼥神聊天记录的时候,灵感来了,为什么不继续发掘下变量的作⽤呢。
于是再定义⼀个变量@pre_parent_code:='' 再存上⼀个 parent_code  ,只要  pre_parent_code不等于当前的parent_code  让 @i:=0 else  @i+=1 就ok了select
-- rownum  判断  @pre_parent_code是否和当前的parent_code⼀样,true:让 @i+=1 false:重置@i
(@i :=case when@pre_parent_code=parent_code then@i+1else1end )  rownum,
my_test.*,
简单的mysql语句--  设置 @pre_parent_code等于上⼀个 parent_code
(@pre_parent_code:=parent_code)
from    my_test ,
(SELECT@i :=0, @pre_parent_code:='') AS a
group by  parent_code ,code ,id
order by  parent_code
结果如下图
遇到难题千万别放弃,万⼀实现了呢,更何况这是爱情的⼒量呢,哇O(∩_∩)O哈哈哈~

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。