語法介紹
窗口函數(shù)語法:
<窗口函數(shù)> over (partition by <用于分組的列名>
order by <用于排序的列名>
rows/range子句<用于定義窗口大小> )
<窗口函數(shù)>可以放以下兩種函數(shù):
1) 專用窗口函數(shù),包括后面要講到的rank, dense_rank, row_number等專用窗口函數(shù)。
2) 聚合函數(shù),如sum. avg, count, max, min等
1)專用窗口函數(shù)
rank, dense_rank, row_number這三個函數(shù)的區(qū)別在這篇文章里有詳細(xì)介紹,簡略說就是:
- Rank:有相同名次,名次按實際個數(shù)走,會跳數(shù)字。
- Dense_rank: 有相同名次,名次不跳數(shù)
- Row_number:相同分?jǐn)?shù)按行數(shù)排序
分?jǐn)?shù) | Rank | Dense_Rank | Row_number |
---|---|---|---|
100 | 1 | 1 | 1 |
100 | 1 | 1 | 2 |
90 | 3 | 2 | 3 |
2)聚合函數(shù)
這里以sum()
為例子,使用常用的部門員工數(shù)據(jù)集,介紹聚合函數(shù)的不同組合用法
例1: 求各個部門的薪酬總數(shù):
3) 滑動窗口:rows&range用法
[<ROWS or RANGE clause> BETWEEN <Start expr> AND <End expr>]
-
ROWS: 表示按照行的范圍進(jìn)行定義框架,根據(jù)order by子句排序后,取的前N行及后N行的數(shù)據(jù)計算(與當(dāng)前行的值無關(guān),只與排序后的行號相關(guān))。常用:
rows n perceding
表示從當(dāng)前行到前n行(一共n+1行) - RANGE:表示按照值的范圍進(jìn)行定義框架,根據(jù)order by子句排序后,指定當(dāng)前行對應(yīng)值的范圍取值,行數(shù)不固定,只要行值在范圍內(nèi),對應(yīng)行都包含在內(nèi)。適用于對日期、時間、數(shù)值排序分組
邊界可取值(Start expr & End expr) | 說明 |
---|---|
Current Row | 當(dāng)前行 |
N preceding | 前 n 行,n 為數(shù)字, 比如 2 Preceding 表示前2行 |
unbounded preceding | 開頭 |
N following | 后N行,n 為數(shù)字, 比如 2 following 表示后2行 |
unbounded following | 結(jié)尾 |
range取特定日期區(qū)間 | 說明 |
---|---|
range interval 7-1 day preceding | 最近7天的值 |
range between interval 1 day preceding and interval 1 day following | 前后一天和當(dāng)天的值 |
列2:求按id號累計員工的薪資(rows 用法)
注:如果將這里的rows 換成range 結(jié)果是一樣的,因為這里使用id號排序,id和行號一致。
例3:求每個員工的薪資情況以及對應(yīng)±1萬元及±5千元薪資范圍內(nèi)的人數(shù) (Range用法)
Range 是根據(jù)值來組合排序的,結(jié)果中的第一行 Same的工資是60000, 而薪資范圍內(nèi)在50000-70000的人一共有4個,薪資范圍內(nèi)在55000-65000的人只有一個。文章來源:http://www.zghlxwxcb.cn/news/detail-692846.html
參考問題連接
累計問題: ??途W(wǎng) SQL159 每個創(chuàng)作者每月的漲粉率及截止當(dāng)前的總粉絲量
限制條件下的累計問題: ??途W(wǎng)SQL160 國慶期間每類視頻點贊量和轉(zhuǎn)發(fā)量
The RANGE Clause in SQL Window Functions: 5 Practical Examples文章來源地址http://www.zghlxwxcb.cn/news/detail-692846.html
到了這里,關(guān)于MYSQL窗口函數(shù)(Rows & Range)——滑動窗口函數(shù)用法的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!