sql server 序號(hào)函數(shù)
序號(hào)函數(shù)
- ROW_NUMBER() 順序排序
- RANK() 并列排序,會(huì)跳過(guò)重復(fù)的序號(hào),比如序號(hào)為1,1,3
- DENSE_RANK() 并列排序,不會(huì)跳過(guò)重復(fù)的序號(hào),比如 序號(hào)為 1,1,2
語(yǔ)法結(jié)構(gòu)
函數(shù) over ( [ partition by 字段名1, [ 字段2,。。。字段n] order by 字段名 ASC | DESC ] )
## 或者
函數(shù) over 窗口名 ... ..window 窗口名 as ( [ partition by 字段名 order by 字段名 asc | DESC ] )
### over 關(guān)鍵字 指定函數(shù)窗口的范圍
如果省略后面括號(hào)中的內(nèi)容,則窗口會(huì)包含滿足where 條件的所有記錄,窗口函數(shù)會(huì)基于所有滿足where條件的記錄 **進(jìn)行計(jì)算**
如果over 關(guān)鍵字后面的括號(hào)不為空,則可以使用如下語(yǔ)句設(shè)置窗口
窗口名:為窗口設(shè)置一個(gè)別名,用來(lái)表示窗口, 放在 sql 最后位置
partition by 子句:指定窗口函數(shù)按照哪些字段進(jìn)行分組。分組后,窗口函數(shù)可以在**每個(gè)分組中分別**執(zhí)行。
order by 子句:指定窗口函數(shù)按照哪些字段進(jìn)行排序,執(zhí)行排序操作使窗口函數(shù)按照排序后的數(shù)據(jù)記錄的**順序**進(jìn)行編號(hào)
select RANK() over ( partition by course by score desc ) as 排名,stu_name
from stu_grade
# 方法2
select RANK() over cnd as 排名,stu_name
from stu_grade
where window cnd as ( partition by course by score desc )
窗口函數(shù)的優(yōu)點(diǎn)
使用窗口函數(shù),只用了一步就完成了查詢,而且,由于沒(méi)有用到臨時(shí)表,執(zhí)行的效率也更高了。很顯然,在這種需要用到分組統(tǒng)計(jì)的結(jié)果對(duì)每一條記錄進(jìn)行計(jì)算的場(chǎng)景下,使用窗口函數(shù)更好
窗口函數(shù)的作用類似于在查詢中對(duì)數(shù)據(jù)進(jìn)行分組,不同的是,分組操作會(huì)把分組的結(jié)果聚合成一條記錄,而窗口函數(shù)是將結(jié)果置于每一條數(shù)據(jù)記錄中。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-669720.html
窗口函數(shù)可分為: ①靜態(tài)窗口函數(shù)②動(dòng)態(tài)窗口函數(shù)
靜態(tài)窗口函數(shù)的窗口大小是固定的,不會(huì)因?yàn)橛涗浀牟煌煌?br> 動(dòng)態(tài)窗口函數(shù)的窗口大小會(huì)隨著記錄的不同而變化。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-669720.html
到了這里,關(guān)于mysql 8.0 窗口函數(shù) 之 序號(hào)函數(shù) 與 sql server 序號(hào)函數(shù) 一樣的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!