Mysql 里面使用row_number() 的用法和注意
来源:互联网 发布:apache weblogic 插件 编辑:程序博客网 时间:2024/06/05 03:34
虽然使用不多,但是也有情况是需要在mysql 里面写语句开发功能的。在sql server 使用惯了,习惯了使用row_number() 函数进行排序,但是mysql 确没有这样一个函数。然后找到了po主写的一篇 文章。通过变量赋值来查询的。(PS 我测试的版本是mysql 5.6)
参考链接:http://www.cnblogs.com/advocate/archive/2012/03/02/2376900.html
先建表
CREATE TABLE `test` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `Col1` varchar(50) DEFAULT NULL, `Col2` varchar(50) DEFAULT NULL, `Col3` int(11) DEFAULT NULL, `Col4` float DEFAULT NULL, PRIMARY KEY (`ID`)) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
然后插入测试数据,使用po主介绍的方法来测试
insert into test(Col1,Col2,Col3,Col4) values (1,2,3,4),(1,2,6,5),(1,2,7,8),(1,"激发",5,7);delimiter //select @row:=case when @row is null then 1 else @row+1 end as RNr, ID,Col1,Col2,Col3,Col4 from test ;//delimiter ;
结果查询出结果是
查询出来的记过,Rnr为什么都是1 呢?因为对于本次查询来说,@row 这个变量的值,一直都是null ,所以根据case 的判别式来看的话,就只能是1 了。引起了这种现象。但是再执行,就正常的了,我们将同样的脚本
再执行一次,查出来应该就是2345了
测试验证确实如此,由此可见。变量在本次会话里面是一直存在的,并且每次会沿用,所以就出现前面的那种情况。
其实对应的解决方法也很简单,既然因为每个会话都会用同一个值,那么只需要在开始的时候赋初值就可以解决问题了,比如我们这个例子在开始的时候将 set @row = 0; 加上这句,那么每次执行,都会先赋初值,当然就可以得到一致的执行效果了。
这个测试告诉了我,在这个数据库里面,控制变量初始值hin重要。
0 0
- Mysql 里面使用row_number() 的用法和注意
- MSSQL ROW_NUMBER()、RANK()和DENSE_RANK()的用法
- ROW_NUMBER和WITH 用法
- mysql分页原理和sqlserver里面序列的用法
- ROW_NUMBER()的用法
- ROW_NUMBER的用法
- sql row_number的用法
- ROW_NUMBER()的用法
- ROW_NUMBER()函数的用法
- SQL ROW_NUMBER() 的用法
- ROW_NUMBER()的用法
- Rownum和row_number() over()的使用
- Oracle Rownum和row_number() over()的使用
- Rownum和row_number() over()的使用
- oracle Rownum和row_number() over()的使用
- oracle,在一条sql语句里面的wmsys.wm_concat()、row_number()、union all 的用法
- mysql 实现oracle里面row_number() OVER (PARTITION BY cid,author ORDER BY id DESC) 的方法
- sql中函数over()和row_number()的用法
- oc与h5交互
- WordPress调用函数大全
- JNI层线程回调Java函数示例
- 关于datetime 和 int 之间相互转换
- 测试几个xml的问题
- Mysql 里面使用row_number() 的用法和注意
- 开窗函数 First_Value 和 Last_Value
- 关于Mysql 触发器
- POJ 1321
- oracle基础教程:Oracle应用系统结构
- 设计模式 -单例模式
- java 加解密
- NYOJ-8 一种排序【sort与qsort】
- UVA-10361 Automatic Poetry