Mysql row number()排序函數(shù)的用法和注意
雖然使用不多,但是也有情況是需要在mysql 里面寫語句開發(fā)功能的。在sql server 使用慣了,習慣了使用row_number() 函數(shù)進行排序,但是mysql 確沒有這樣一個函數(shù)。然后找到了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;
然后插入測試數(shù)據(jù),使用po主介紹的方法來測試
insert into test(Col1,Col2,Col3,Col4) values (1,2,3,4),(1,2,6,5),(1,2,7,8),(1,"激發(fā)",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 ,所以根據(jù)case 的判別式來看的話,就只能是1 了。引起了這種現(xiàn)象。但是再執(zhí)行,就正常的了,我們將同樣的腳本
再執(zhí)行一次,查出來應該就是2345了

測試驗證確實如此,由此可見。變量在本次會話里面是一直存在的,并且每次會沿用,所以就出現(xiàn)前面的那種情況。
其實對應的解決方法也很簡單,既然因為每個會話都會用同一個值,那么只需要在開始的時候賦初值就可以解決問題了,比如我們這個例子在開始的時候將 set @row = 0; 加上這句,那么每次執(zhí)行,都會先賦初值,當然就可以得到一致的執(zhí)行效果了。
這個測試告訴了我,在這個數(shù)據(jù)庫里面,控制變量初始值hin重要。
以上所述是小編給大家介紹的Mysql row_number()排序函數(shù)的用法和注意 ,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
- 使用row_number()實現(xiàn)分頁實例
- oracle中rownum和row_number()
- 利用ROW_NUMBER() OVER函數(shù)給SQL數(shù)據(jù)庫中每一條記錄分配行號的方法
- SQL中distinct 和 row_number() over() 的區(qū)別及用法
- MYSQL row_number()與over()函數(shù)用法詳解
- SQL使用ROW_NUMBER() OVER函數(shù)生成序列號
- MySQL中rank() over、dense_rank() over、row_number() over用法介紹
- SQL中row_number()?over(partition?by)的用法說明
- Row_number()函數(shù)用法小結
- 數(shù)據(jù)庫中row_number()?分組排序函數(shù)的具體使用
相關文章
linux配置mysql數(shù)據(jù)庫遠程連接失敗的解決方法
這篇文章主要為大家詳細介紹了linux配置mysql數(shù)據(jù)庫遠程連接失敗的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-06-06
mysql8.0.14.zip安裝時自動創(chuàng)建data文件夾失敗服務無法啟動
這篇文章主要介紹了mysql8.0.14.zip安裝時自動創(chuàng)建data文件夾失敗,導致服務無法啟動的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-02-02
MySQL數(shù)據(jù)庫表內容的增刪查改操作實例詳解
對于刪除操作來說,是將表單個或者多個數(shù)據(jù)進行刪除,而截斷則是對整個表進行操作,會將整個表數(shù)據(jù)都清除,本文給大家介紹MySQL數(shù)據(jù)庫表內容的增刪查改操作大全,感興趣的朋友一起看看吧2025-04-04

