Mysql row number()排序函数的用法和注意
程序员文章站
2023-12-20 20:15:52
虽然使用不多,但是也有情况是需要在mysql 里面写语句开发功能的。在sql server 使用惯了,习惯了使用row_number() 函数进行排序,但是mysql 确没...
虽然使用不多,但是也有情况是需要在mysql 里面写语句开发功能的。在sql server 使用惯了,习惯了使用row_number() 函数进行排序,但是mysql 确没有这样一个函数。然后找到了po主写的一篇 文章。通过变量赋值来查询的。(ps 我测试的版本是mysql 5.6)
先建表
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重要。
以上所述是小编给大家介绍的mysql row_number()排序函数的用法和注意 ,希望对大家有所帮助
推荐阅读
-
Mysql row number()排序函数的用法和注意
-
ROW_NUMBER SQL Server 2005的LIMIT功能实现(ROW_NUMBER()排序函数)
-
SQL Server 排序函数 ROW_NUMBER和RANK 用法总结
-
ROW_NUMBER SQL Server 2005的LIMIT功能实现(ROW_NUMBER()排序函数)
-
SQL中distinct 和 row_number() over() 的区别及用法
-
SQL Server 排序函数 ROW_NUMBER和RANK 用法总结
-
SQL中distinct 和 row_number() over() 的区别及用法
-
SQL2005 四个排名函数(row_number、rank、dense_rank和ntile)的比较
-
SQLSERVER分页查询关于使用Top方式和row_number()解析函数的不同
-
MySQL实现窗口函数row_number():选取班级里每科最高成绩的同学