欢迎投稿

今日深度:

mysql中如何按分组添加序号,

mysql中如何按分组添加序号,


目录
  • mysql按分组添加序号
    • 不按分组添加序号
    • 按分组添加序号
  • mysql分组给字段设置序号进行排序
    • 分组update设置序号
    • 取分组后的前n名
  • 总结

    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值都混在一起了,只能写数据库脚本来进行纠正

    最新版本v2.0

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

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持PHP之友。

    您可能感兴趣的文章:
    • Mysql利用group by分组排序
    • 两种方法实现mysql分组计数,范围汇总
    • 详解MySQL分组排序求Top N

    www.htsjk.Com true http://www.htsjk.com/Mysql/46930.html NewsArticle mysql中如何按分组添加序号, 目录 mysql按分组添加序号 不按分组添加序号 按分组添加序号 mysql分组给字段设置序号进行排序 分组update设置序号 取分组后的前n名 总结 mysql按分组添加序...
    评论暂时关闭