加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

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
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
 
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章