本教程操作环境:windows10系统、mysql5.7版本、dell g3电脑。
mysql查询怎么添加序号?
mysql给查询加序号
数据表drop table if exists tb_score;create table tb_score( id int(11) not null auto_increment, userid varchar(20) not null comment '用户id', subject varchar(20) comment '科目', score double comment '成绩', primary key(id))engine = innodb default charset = utf8;insert into tb_score(userid,subject,score) values ('001','语文',90);insert into tb_score(userid,subject,score) values ('001','数学',92);insert into tb_score(userid,subject,score) values ('001','英语',80);insert into tb_score(userid,subject,score) values ('002','语文',88);insert into tb_score(userid,subject,score) values ('002','数学',90);insert into tb_score(userid,subject,score) values ('002','英语',75.5);insert into tb_score(userid,subject,score) values ('003','语文',70);insert into tb_score(userid,subject,score) values ('003','数学',85);insert into tb_score(userid,subject,score) values ('003','英语',90);insert into tb_score(userid,subject,score) values ('003','政治',82);
mysql给查询加序号一种普遍的解决方法是:通过定义用户变量生成序号
举例:查询表中的数据并加上序号,对应的sql为:
select id,userid,subject,score, (@i :=@i + 1) as '序号'from tb_score, (select @i := 0) as itable;
+----+--------+---------+-------+--------+| id | userid | subject | score | 序号 |+----+--------+---------+-------+--------+| 1 | 001 | 语文 | 90 | 1 || 2 | 001 | 数学 | 92 | 2 || 3 | 001 | 英语 | 80 | 3 || 4 | 002 | 语文 | 88 | 4 || 5 | 002 | 数学 | 90 | 5 || 6 | 002 | 英语 | 75.5 | 6 || 7 | 003 | 语文 | 70 | 7 || 8 | 003 | 数学 | 85 | 8 || 9 | 003 | 英语 | 90 | 9 || 10 | 003 | 政治 | 82 | 10 |+----+--------+---------+-------+--------+10 rows in set (0.00 sec)
select *, (@i :=@i + 1) as '序号'from tb_score;
+----+--------+---------+-------+--------+| id | userid | subject | score | 序号 |+----+--------+---------+-------+--------+| 1 | 001 | 语文 | 90 | 11 || 2 | 001 | 数学 | 92 | 12 || 3 | 001 | 英语 | 80 | 13 || 4 | 002 | 语文 | 88 | 14 || 5 | 002 | 数学 | 90 | 15 || 6 | 002 | 英语 | 75.5 | 16 || 7 | 003 | 语文 | 70 | 17 || 8 | 003 | 数学 | 85 | 18 || 9 | 003 | 英语 | 90 | 19 || 10 | 003 | 政治 | 82 | 20 |+----+--------+---------+-------+--------+10 rows in set (0.00 sec)
或者
set @i=0;select id,userid,subject,score,@i:=@i+1 as '序号' from tb_score;
+----+--------+---------+-------+--------+| id | userid | subject | score | 序号 |+----+--------+---------+-------+--------+| 1 | 001 | 语文 | 90 | 1 || 2 | 001 | 数学 | 92 | 2 || 3 | 001 | 英语 | 80 | 3 || 4 | 002 | 语文 | 88 | 4 || 5 | 002 | 数学 | 90 | 5 || 6 | 002 | 英语 | 75.5 | 6 || 7 | 003 | 语文 | 70 | 7 || 8 | 003 | 数学 | 85 | 8 || 9 | 003 | 英语 | 90 | 9 || 10 | 003 | 政治 | 82 | 10 |+----+--------+---------+-------+--------+10 rows in set (0.00 sec)
解释说明1、(@i:=@i+1) 也可以写成 @i:=@i+1,加括号是为了视觉上更清晰。
它代表的意思是:变量 i 加 1 赋值给变量 i,在定义好一个变量后每次查询都会给这个变量自增,每次执行查询语句获取结果后就不需要这个变量自增了。
2、(select @i:=0) as itable,定义用户变量 i,设置初始值为 0,然后将它作为派生表使用,as 定义了表的别名。
3、set @i=0 。定义用户变量 i,赋初值为 0。
相关知识点1、mysql定义用户变量的方式:
select @变量名 ,上面的sql语句中,变量的名字是 i。
2、用户变量赋值:一种是直接用 = 号,另一种是用 := 号。
= 和 := 的区别
使用 set 命令对用户变量进行赋值时,两种方式都可以使用,即:set @变量名=xxx 或 set @变量名:=xxx
使用 select 语句对用户变量进行赋值时,只能使用 :=“ 方式,因为在 select 语句中,”= 号被看作是比较操作符。
即:select @变量名:=xxx:
①:用户变量
②:派生表
③:as设置别名
推荐学习:《mysql视频教程》
以上就是mysql查询怎么添加序号的详细内容。
