MySQL中實現開窗函式

2021-09-25 11:57:19 字數 1126 閱讀 2819

一、概述

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...