mysql中如何按分组添加序号

 更新时间:2023年06月19日 11:08:32   作者:javafg  
这篇文章主要介绍了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;
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

总结

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

相关文章

  • MySql中使用INSERT INTO语句更新多条数据的例子

    MySql中使用INSERT INTO语句更新多条数据的例子

    这篇文章主要介绍了MySql中使用INSERT INTO语句更新多条数据的例子,MySQL的特有语法,需要的朋友可以参考下
    2014-06-06
  • innodb_flush_method取值方法(实例讲解)

    innodb_flush_method取值方法(实例讲解)

    下面小编就为大家带来一篇innodb_flush_method取值方法(实例讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • MySQL优化insert性能的方法示例

    MySQL优化insert性能的方法示例

    对于一些数据量较大的系统,数据库面临的问题除了查询效率低下,还有就是数据入库时间长。下面这篇文章主要给大家介绍了关于MySQL优化insert性能的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2018-06-06
  • MySQL慢查询日志slowlog的具体使用

    MySQL慢查询日志slowlog的具体使用

    本文主要介绍了MySQL慢查询日志slowlog的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-06-06
  • MySQL存储过程的创建使用以及实现数据快速插入

    MySQL存储过程的创建使用以及实现数据快速插入

    因最近想要测试一下MySQL百万级数据处理过程,所以要一次对数据库快速插入大量数据,下面这篇文章主要给大家介绍了关于MySQL存储过程的创建使用以及实现数据快速插入的相关资料,需要的朋友可以参考下
    2023-03-03
  • Mac 将mysql路径加入环境变量的方法

    Mac 将mysql路径加入环境变量的方法

    这篇文章主要介绍了Mac如何将mysql路径加入环境变量,有需要的朋友好按照下面的步骤操作即可
    2014-07-07
  • 详解Mysql主从同步配置实战

    详解Mysql主从同步配置实战

    这篇文章主要介绍了详解Mysql主从同步实战,实例分析了Mysql主从同步的原理和实现,非常具有实用价值,需要的朋友可以参考下。
    2017-03-03
  • 用percona-toolkit为MySQL收集系统和性能信息的教程

    用percona-toolkit为MySQL收集系统和性能信息的教程

    这篇文章主要介绍了用percona-toolkit为MySQL收集系统和性能信息的教程,可以轻松地将服务器基本信息录入数据库,需要的朋友可以参考下
    2015-11-11
  • mysql 8.0.19 安装配置方法图文教程

    mysql 8.0.19 安装配置方法图文教程

    这篇文章主要为大家详细介绍了mysql 8.0.19 安装配置方法图文教程,文中安装步骤介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02
  • PHP使用mysqli扩展连接MySQL数据库

    PHP使用mysqli扩展连接MySQL数据库

    这篇文章主要介绍了PHP使用mysqli扩展连接MySQL数据库,需要的朋友可以参考下
    2014-08-08

最新评论