tft每日頭條

 > 圖文

 > mysql 如何查看自定義函數

mysql 如何查看自定義函數

圖文 更新时间:2024-12-30 19:52:51

接上一篇,這一篇主要介紹三類窗口函數,分布函數、前後函數和頭尾函數。

mysql 如何查看自定義函數(MySQL窗口函數分布前後)1

mysql 如何查看自定義函數(MySQL窗口函數分布前後)2

【分布函數】

PERCENT_RANK基于RANK()函數的排序結果,percent_ranks列按照公式(rank-1) / (rows-1)帶入rank值(row_num列)和rows值,其中,rank為RANK()函數産生的序号,rows為當前窗口的記錄總行數。

SELECT id, user_name, date, amount, RANK() OVER w as ranks, ROUND(PERCENT_RANK() OVER w,2) as percent_ranks FROM orders WINDOW w AS (PARTITION BY user_name ORDER BY amount ASC)

mysql 如何查看自定義函數(MySQL窗口函數分布前後)3

CUME_DIST,分組内小于等于當前rank值的行數/分組内總行數,這個函數比percen_rank使用場景更多。可以用于計算大于等于或小于等于當前訂單金額的訂單比例有多少。

SELECT id, user_name, date, amount, RANK() OVER w as ranks, ROUND(PERCENT_RANK() OVER w,2) as percent_ranks, ROUND(CUME_DIST() OVER w,2) as cume_dists FROM orders WINDOW w AS (PARTITION BY user_name ORDER BY amount ASC)

mysql 如何查看自定義函數(MySQL窗口函數分布前後)4

【前後函數】

分區中位于當前行前n行(LAG)或後n行(LEAD)的記錄值。這兩個函數在實際中還是有使用場景,比如要查詢上一個訂單距離當前訂單的時間間隔,或者本條訂單距離下一條訂單的時間間隔。

SELECT id, user_name, date, amount, LAG(date,1) OVER w as 前一條訂單時間, LEAD(date,1) OVER w as 後一條訂單時間 FROM orders WINDOW w AS (PARTITION BY user_name ORDER BY date ASC)

mysql 如何查看自定義函數(MySQL窗口函數分布前後)5

如果要計算距離上一條訂單的天數,隻需要增加一列,用DATEDIFF函數把兩個日期相減就可以了。如果是第一條訂單,就會返回空值。

SELECT id, user_name, date, amount, LAG(date,1) OVER w as 前一條訂單時間, DATEDIFF(date,LAG(date,1) OVER w) 距離上一天訂單天數 FROM orders WINDOW w AS (PARTITION BY user_name ORDER BY date ASC)

mysql 如何查看自定義函數(MySQL窗口函數分布前後)6

【頭尾函數】

頭尾函數FIRST_VAL和LAST_VAL函數,用來得到分區中的第一個或最後一個指定參數的值。可以用來查詢每個用戶第一次和最後一次的訂單數據信息,然後就行比較操作。需要注意的是,最後一條訂單時間是基于當前訂單時間來看的,所有是等于當前訂單時間。

SELECT id, user_name, date, amount, first_value(date) OVER w as 第一條訂單時間, last_value(date) OVER w as 最後一條訂單時間 FROM orders WINDOW w AS (PARTITION BY user_name ORDER BY date ASC)

mysql 如何查看自定義函數(MySQL窗口函數分布前後)7

End

mysql 如何查看自定義函數(MySQL窗口函數分布前後)8

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关圖文资讯推荐

热门圖文资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved