MySQL8資料庫視窗函式
阿新 • • 發佈:2018-12-10
對於視窗函式,比如row_number(),rank(),dense_rank(),NTILE(),PERCENT_RANK()等等,現在MySQL8版本已經支援了。
row_number()(分組)排序編號 row_number()over(partition by user_no order by create_date desc) as row_num,按照使用者分組,按照create_date排序,對已有資料生成一個編號。 當然也可以不分組,對整體進行排序。任何一個視窗函式,都可以分組統計或者不分組統計(也即可以不要partition by 都可以,看需求)
row_number()over(partition by user_no order by create_date desc) as row_num
rank() 類似於 row_number(),也是排序功能,但是rank()有什麼不一樣?新的事物的出現必然是為了解決潛在的問題。 如果再往測試表中寫入一條資料:insert into order_info values (11,’u0002’,800,’2018-1-22’); 對於測試表中的U002使用者來說,有兩條create_date完全一樣的資料(假設有這樣的資料),那麼在row_number()編號的時候,這兩條資料卻被編了兩個不同的號 理論上講,這兩條的資料的排名是並列最新的。因此rank()就是為了解決這個問題的,也即:排序條件一樣的情況下,其編號也一樣。
dense_rank()