一、概述
row_number是資料庫中常用的乙個開窗函式,可以實現資料分割槽編號的功能,然而mysql並不支援開窗函式。本文介紹了在mysql中實現開窗函式的方法。
二、經典開窗函式
首先準備基礎資料,如下入所示。
在hive或oracle中使用經典開窗函式實現資料分組編號的方法如下。
select name,
age,
row_number() over (partition by age order by name) as rank
from student
但是,mysql中並不支援上述開窗函式。
三、mysql實現開窗函式的方法
select @row_number:=
case when @previous_age = a.age then @row_number + 1
else 1
end as num,
`name`,
age,
@previous_age:=a.age
from
a, (select @previous_age:=0, @row_number:=0) as b
order by age,`name`
其中表a為上述的學生年齡表。
mysql允許使用者自定義變數,語法為@var_name,賦值方式為「:=」,並支援基本數學計算,例如,@row_number:=0表示定義變數row_number並賦值為0,@row_number + 1 表示row_number的值加1。
下面分析分組編號的執行過程。a表按照age和name排序,@previous_age記錄上一行資料的age。@previous_age的初始值為0,執行過程,逐一和當前記錄的age比較,如果@previous_age=a.age,說明當前記錄和前面的記錄是同乙個年齡,那麼將row_number加1;如果@previous_age != a.age,說明當前記錄是乙個新的年齡,那麼將row_number賦值為1。所有資料掃瞄完成後,也就完成了分組編號。
mysql 開窗函式 累加 mysql實現開窗函式
學習過oracle的應該知道,oracle中的分析函式功能十分強大,包括mssql postgresql等資料庫都支援開窗函式。然而mysql至今都沒有提供這樣的功能,今天就來 下用mysql實現一些開窗功能需求。實驗資料 表sale month user id amount 201601 1 50...
mysql實現開窗函式
mysql實現開窗函式 學習過oracle的應該知道,oracle中的分析函式功能十分強大,包括mssql postgresql等資料庫都支援開窗函式。然而mysql至今都沒有提供這樣的功能,今天就來 下用mysql實現一些開窗功能需求。實驗資料 表sale month user id amount...
mysql 排序開窗函式 MySQL中實現開窗函式
一 概述 row number是資料庫中常用的乙個開窗函式,可以實現資料分割槽編號的功能,然而mysql並不支援開窗函式。本文介紹了在mysql中實現開窗函式的方法。二 經典開窗函式 首先準備基礎資料,如下入所示。在hive或oracle中使用經典開窗函式實現資料分組編號的方法如下。select n...