mysql中按分组添加序号
发布时间:2023-09-16 15:05:44 所属栏目:MySql教程 来源:
导读:mysql按分组添加序号
不按分组添加序号
1.第一种
select (@i := @i + 1) as rownum,b.* from table b, (SELECT @i := 0) as a order by region_id desc
2.第二种
set @i=0;
sel
不按分组添加序号
1.第一种
select (@i := @i + 1) as rownum,b.* from table b, (SELECT @i := 0) as a order by region_id desc
2.第二种
set @i=0;
sel
mysql按分组添加序号 不按分组添加序号 1.第一种 select (@i := @i + 1) as rownum,b.* from table b, (SELECT @i := 0) as a order by region_id desc 2.第二种 set @i=0; select @i:=@i+1 as rownum, b.* from table b order by region_id desc 上面两种方法原理就是,事先定义一个变量,通过变量的递加以及虚拟表的联查达到生成序号列的目的 按分组添加序号 select -- rownum 判断 @now_region_id是否和当前的region_id一样,true:让 @i+=1 false:重置@i (@i := case when @now_region_id=region_id then @i + 1 else 1 end ) rownum, -- 设置 @now_region_id等于region_id (@now_region_id:=region_id), b.*, fromtable b, (SELECT @i := 0, @now_region_id:='') as a order by region_id desc mysql分组给字段设置序号进行排序 之前有一个给商户的员工进行排序的需求,结果我没有按照商户进行设置排序sort值,后面所有的商户的员工的sort值都混在一起了,只能写数据库脚本来进行纠正 分组update设置序号 最新的sql如下: UPDATE tb_desc SET sort = 0; -- @C这里想从几开始 就从几开始. @A表示上一行的名称. SET @C = 0;SET @A = ''; UPDATE tb_desc d SET d.`sort` = ( SELECT CASE WHEN @A = d.`name` THEN @D := @D + 1 ELSE -- 这里(@A := d.`name`) and 0 )的and,只是为了和0进行与运算,不影响和@D相加最后的结果 ((@A := d.`name`) and 0 )+@D:= @C END ) ORDER BY d.`name`; 首先有一个样表,结构如下: 特意将sort打乱来模拟场景,现在需要按照name分组,使sort在每一组name中是从0开始有序的数 执行sql OK 取分组后的前n名 SET @rank:=0; SELECT * FROM (SELECT a.*, IF(@tmp=deptno,@rank:=@rank + 1,@rank:=1) AS group_id, @tmp:=deptno AS tmp FROM employee a ORDER BY deptno,sal DESC) b WHERE b.group_id<=5 (编辑:聊城站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐