原创可用mysql实现RowNum实例详解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Mysql实现RowNum实例详解
Kevin.gao 201707
最近工作中用到Mysql要实现RowNum,查看了不少文章,大都写的很简单,没有完整的实例展示,所以自己做出例子来留个记录同时也分享一下。
文章结构:
1.准备环境和模拟数据
2. SQL语句与结果展示
3.分析说明
4.总结
1.先做一个表test_table,里面就两个字段cttime和id;
CREATE TABLE `test_table` (`cttime` DATE NULL,`id` INT NULL)COLLATE='utf8_bin'
ENGINE=InnoDB ;
做模拟数据插入语句
insert into test_table (cttime,id) values ('2015-01-01 00:00:00',1);
insert into test_table (cttime,id) values ('2015-01-02 00:00:00',2);
insert into test_table (cttime,id) values ('2015-01-01 00:00:00',3);
insert into test_table (cttime,id) values ('2015-01-02 00:00:00',3);
insert into test_table (cttime,id) values ('2015-01-03 00:00:00',3);
insert into test_table (cttime,id) values ('2015-01-01 00:00:00',4);
insert into test_table (cttime,id) values ('2015-01-02 00:00:00',4);
insert into test_table (cttime,id) values ('2015-01-03 00:00:00',4);
insert into test_table (cttime,id) values ('2015-01-02 00:00:00',5);
insert into test_table (cttime,id) values ('2015-01-03 00:00:00',5);
insert into test_table (cttime,id) values ('2015-01-01 00:00:00',6);
insert into test_table (cttime,id) values ('2015-01-02 00:00:00',6);
insert into test_table (cttime,id) values ('2015-01-03 00:00:00',6);
insert into test_table (cttime,id) values ('2015-01-04 00:00:00',6);
2.先看看原始数据的样子select*from test_table;
查询的SQL看看带RowNum的效果
select base.rownum,base.cttime,base.id from(
select
@rownum rownum,
(@rownum:=@rownum+1)nrownum,
t.*from
(select*from test_table order by id,cttime)t,
(select@rownum:=1)r
)base
结果如下
3.分析说明
最外层的结果集从base中取得数据是为了整齐好看,然后我们往base里面看。Base里面的执行结果
在base内有一个select ... from t,r 的语句,这里没有关联条件,
select
@rownum rownum,
(@rownum:=@rownum+1)nrownum,
t.*from
(select*from test_table order by id,cttime)t,
(select@rownum:=1)r
其中t里面是进行了排序,排序不是必须的,不排序也正常可以用。
其中r只是创建了一个变量rownum初始值是1,
查询第一行的时候:
直接取变量@rownum rownum, rownum显示是1,
同时显示下一个rownum的值nrownum(意思是nextrownum),这里是进行了加1,(@rownum:=@rownum+1)nrownum,
查询第二行的时候:
直接取变量@rownum rownum, rownum显示是2,
解释同上。
4.总结:
利用mysql的变量机制,逐行执行,每执行一行对变量进行加一操作。