mysql:實現oracle、sql server中的row_number() over功能

對數據庫中的某張表的進行分組排序並對結果集的輸出進行編號

Oracle和SQL Server實現:通過row_number() over,

SQLserver實例:

SELECT 
  ROW_NUMBER() OVER(PARTITION BY recovery_model_desc ORDER BY name ASC) 
    AS Row#,
  name, recovery_model_desc
FROM sys.databases WHERE database_id < 5;

下面是結果集:

   

MySQL中實現:這裏列出語法,自己測吧:

 SELECT

     IF(@temp=列名1, @rank:=@rank+1,@rank:=1) rn,

     @temp:=列名1,

      列名2,

      ......,

     列名n 

      FROM 表
          ORDER BY 列名1,列名2, 升序或降序;

分析:(注意紅色部分)

 IF(@temp=列名1, @rank:=@rank+1,@rank:=1) rn:每一行判斷,當前行的列名1的值是否等於上一個@temp變量值,如果是在上一個@rank變量值基礎上+1,否則@rank賦值1

 @temp:=列名1,當前行列賦值給變量@temp

ORDER BY 列名1,列名2:列名1實現分組,列名2實現排序

IF結束後記得加上@temp:=列名1,也就是要分組的列,你可以不加試試查看結果集

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章