Mysql 裡面使用row_number() 的用法和註意

来源:http://www.cnblogs.com/Gin-23333/archive/2016/06/30/5630720.html
-Advertisement-
Play Games

雖然使用不多,但是也有情況是需要在mysql 裡面寫語句開發功能的。在sql server 使用慣了,習慣了使用row_number() 函數進行排序,但是mysql 確沒有這樣一個函數。然後找到了po主寫的一篇 文章。通過變數賦值來查詢的。(PS 我測試的版本是mysql 5.6) 參考鏈接:ht ...


雖然使用不多,但是也有情況是需要在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重要。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • JNI簡介 JNI (Java Native Interface),Java的本地介面 JNI是Java眾多開發技術中的一門,意在利用本地代碼,為Java程式提供 更高效,更靈活的拓展。應用場景包括:對運行效率敏感的演算法實現、跨平臺應用移植、調用系統的底層驅動、調用硬體等。儘管Java一貫以其良好的 ...
  • 本文為原創文章,轉載請註明出處。 文章最後附帶DEMO,請需要的朋友下載。 從API 17開始,Android提供了Presentation類,為多屏異顯開發提供了官方支持,當然最終需求的實現也需要底層硬體及驅動的支持。 基本需求:控制輔屏全屏顯示與主顯不同的內容,且當主顯全屏顯示的內容變化後對輔屏 ...
  • PS:註意事項 一些坑在此聲明: 1、安裝Eclipse後,記得設置各項編碼格式為utf-8 請移步:http://www.blogjava.net/xiaomage234/archive/2014/05/13/413626.html(我也是網上查閱的~~) 2、下載Android SDK時需要翻牆 ...
  • 一、背景 很久之前就想寫一篇文章來記錄Cordova的使用了,上次用到它是在一年前,這次用到它是在這個月。下次用到它還不知道是什麼時候了,為了供以後翻閱,在此做個記錄。現在很多資料都是在硬碟里、網路收藏夾里。這次就一次性彙總到這裡吧。 二、簡介 Cordova提供了一組設備相關的API,通過這組AP ...
  • CocoaLumberjack是一個很好用的日誌列印工具,它可以幫助我們把工程中的日誌信息列印到終端或者輸出到文件中。 地址:https://github.com/CocoaLumberjack/CocoaLumberjack 類圖: 一:插件的運用 因為網上已經對CocoaLumberjack的運 ...
  • sql 的發佈訂閱,想必大家都瞭解,但一般都是在預設的1433的情況下搭建的,那麼1433換成別的埠,發佈還能正常工作嗎? 在一次客戶的真實場景上我就遇到了。 好了,今天不想寫太多,簡化下, 測試環境 發佈伺服器 電腦名 win-01 分發伺服器 電腦名 win-01 (與發佈用的同一臺) 訂 ...
  • 介紹 以前沒有太註意MySQL密碼安全策略的配置方法,只是人為了將密碼設為複雜密碼,但是沒有找到配置的方法,今天薑承堯的微信公眾號正好發佈了一篇關於這個的文章,所以在這裡也順便將方法寫下來。首先該功能是在5.5以後的mysql版本才引入的插件,預設源碼安裝和二進位安裝都沒有啟用該功能,如果沒有開啟該 ...
  • 今天在測試、驗證DROP_SNAPSHOT_RANGE不能徹底快照的過程中遇到了DROP_SNAPSHOT_RANGE無法清理WRM$_SNAPSHOT_DETAILS表中數據的情況,測試伺服器版本為10.2.0.5.0,AWR的快照是1小時採集一次數據,快照保留14天,也就是二周。具體情況如下所示... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...