原创可用mysql实现RowNum实例详解

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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的变量机制,逐行执行,每执行一行对变量进行加一操作。

相关文档
最新文档