MySQL生成行号

引言

    在mysql数据库使用过程中,发现没有像db2那样方便能自动生成行号,于是通过网络查阅资料,现整理如下,方便以后自己查阅.

创建数据库

CREATE DATABASE 		-- 创建数据库
  IF NOT EXISTS `sql_test`  	-- 如果不存在就创建,存在就不创建 
  DEFAULT CHARSET utf8 		-- 设置默认字符集为utf-8
  COLLATE utf8_general_ci;	-- 设置数据库排序规则 utf8_general_ci 
USE `sql_test`;

创建表

-- 创建测试表
CREATE TABLE s_t1(
  tid VARCHAR(10) NOT NULL PRIMARY KEY,
  root VARCHAR(10),
  child VARCHAR(10)
);

插入测试数据

insert into `s_t1` (`tid`, `root`, `child`) values('Sort_0110','A','a1');
insert into `s_t1` (`tid`, `root`, `child`) values('Sort_0024','A','a2');
insert into `s_t1` (`tid`, `root`, `child`) values('Sort_0027','A','a3');
insert into `s_t1` (`tid`, `root`, `child`) values('Sort_0028','A','a4');
insert into `s_t1` (`tid`, `root`, `child`) values('Sort_0021','B','b1');
insert into `s_t1` (`tid`, `root`, `child`) values('Sort_0003','B','b2');
insert into `s_t1` (`tid`, `root`, `child`) values('Sort_0006','B','b3');
insert into `s_t1` (`tid`, `root`, `child`) values('Sort_0001','B','b4');
insert into `s_t1` (`tid`, `root`, `child`) values('Sort_0013','B','b5');
insert into `s_t1` (`tid`, `root`, `child`) values('Sort_0101','C','c1');
insert into `s_t1` (`tid`, `root`, `child`) values('Sort_0007','C','c2');
insert into `s_t1` (`tid`, `root`, `child`) values('Sort_0002','C','c3');
insert into `s_t1` (`tid`, `root`, `child`) values('Sort_0033','D','d1');
insert into `s_t1` (`tid`, `root`, `child`) values('Sort_0035','D','d2');

生成行号

SELECT 
  @r:=@r+1 AS rouNum, 
  a.* 
FROM 
  s_t1 a,
  (SELECT @r:=0) b

结果:

MySQL生成行号_第1张图片

按组生成行号

-- 方法1 先筛选数据,在编写序号
SELECT 
  @root_no:=CASE WHEN @root_val=a.`root` THEN @root_no+1 ELSE 1 END AS rootNo,
  @root_val:=a.`root` AS rootVal,
  a.`child`
FROM
(
  SELECT * FROM s_t1 GROUP BY root,child
) a,(SELECT @root_no:=1,@root_val:='') b

-- 方法2 在删选数据的同事编写序号
SELECT  
     @group_row:=CASE WHEN @parent_code=a.root THEN  @group_row+1 ELSE 1 END AS groupRow,
     @parent_code:=a.`root` AS parent_code,
     a.`child`  
FROM  s_t1 a ,( SELECT @group_row:=1, @parent_code:='') AS b
ORDER BY   a.`root` , a.child 

结果:

MySQL生成行号_第2张图片

以上就是mysql中生成行号的方法,不知道还有没有更简单的

 

你可能感兴趣的:(学习实践)