欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SQL窗口函數(shù)OVER用法實(shí)例整理

 更新時(shí)間:2022年08月26日 11:18:47   作者:BeKnown  
做SQL題時(shí)碰到了over()函數(shù)不太理解,所以整理了下,下面這篇文章主要給大家介紹了關(guān)于SQL窗口函數(shù)OVER用法的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下

OVER的定義

OVER用于為行定義一個(gè)窗口,它對(duì)一組值進(jìn)行操作,不需要使用GROUP BY子句對(duì)數(shù)據(jù)進(jìn)行分組,能夠在同一行中同時(shí)返回基礎(chǔ)行的列和聚合列。

語(yǔ)法

OVER ( [ PARTITION BY column ] [ ORDER BY culumn ] [ROWS|RANGE BETWEEN 邊界規(guī)則1 and 邊界規(guī)則2])

PARTITION BY 子句進(jìn)行分組;

ORDER BY 子句進(jìn)行排序;

ROWS|RANGE 框架是對(duì)窗口進(jìn)行進(jìn)一步的分區(qū),框架有兩種范圍限定方式:一種是使用ROWS子句,通過(guò)指定當(dāng)前行之前或之后的固定數(shù)目的行來(lái)限制分區(qū)中的行數(shù);另一種是RANGE子句,按照排序列的當(dāng)前值,根據(jù)相同值來(lái)確定分區(qū)中的行數(shù)。
窗口函數(shù)OVER()指定一組行,開(kāi)窗函數(shù)計(jì)算從窗口函數(shù)輸出的結(jié)果集中各行的值。

RANGE表示按照值的范圍進(jìn)行范圍的定義,而ROWS表示按照行的范圍進(jìn)行范圍的定義;邊界規(guī)則的可取值見(jiàn)下表

用法

OVER開(kāi)窗函數(shù)必須聚合函數(shù)或排序函數(shù)一起使用,聚合函數(shù)一般指SUM(),MAX(),MIN,COUNT(),AVG()等常見(jiàn)函數(shù)。排序函數(shù)一般指RANK(),ROW_NUMBER(),DENSE_RANK(),NTILE()等。

示例

創(chuàng)建測(cè)試表

create table Employee
(
    ID INT PRIMARY KEY
    ,Name VARCHAR(20)
    ,GroupName VARCHAR(20)
    ,Salary INT
) INSERT into Employee VALUES(1, '小明', '開(kāi)發(fā)部', 8000), (4, '小張', '開(kāi)發(fā)部', 7600), (5, '小白', '開(kāi)發(fā)部', 7000), (8, '小王', '財(cái)務(wù)部', 5000), (9, null, '財(cái)務(wù)部', NULL), (15, '小劉', '財(cái)務(wù)部', 6000), (16, '小高', '行政部', 4500), (18, '小王', '行政部', 4000), (23, '小李', '行政部', 4500), (29, '小吳', '行政部', 4700)
;

SUM后的開(kāi)窗函數(shù)

select  *
        ,SUM(Salary) OVER(PARTITION BY Groupname) 每個(gè)組的總工資
        ,SUM(Salary) OVER(PARTITION BY groupname ORDER BY ID) 每個(gè)組的累計(jì)總工資
        ,SUM(Salary) OVER(ORDER BY ID) 累計(jì)工資
        ,SUM(Salary) OVER() 總工資
from    Employee

結(jié)果如下:

其中開(kāi)窗函數(shù)的每個(gè)含義不同,我們來(lái)具體解讀一下:

SUM(Salary) OVER (PARTITION BY Groupname)

只對(duì)PARTITION BY后面的列Groupname進(jìn)行分組,分組后求解Salary的和。

SUM(Salary) OVER (PARTITION BY Groupname ORDER BY ID)

對(duì)PARTITION BY后面的列Groupname進(jìn)行分組,然后按ORDER BY 后的ID進(jìn)行排序,然后在組內(nèi)對(duì)Salary進(jìn)行累加處理。

SUM(Salary) OVER (ORDER BY ID)

只對(duì)ORDER BY 后的ID內(nèi)容進(jìn)行排序,對(duì)排完序后的Salary進(jìn)行累加處理。

SUM(Salary) OVER ()

對(duì)Salary進(jìn)行匯總處理

排序

ROW_NUMBER()

定義:ROW_NUMBER()函數(shù)作用就是將SELECT查詢(xún)到的數(shù)據(jù)進(jìn)行排序,每一條數(shù)據(jù)加一個(gè)序號(hào)

select  *
        ,ROW_NUMBER() OVER (PARTITION BY ClassName ORDER BY SCORE DESC) 班內(nèi)排序
        ,ROW_NUMBER() OVER (ORDER BY SCORE DESC) AS 總排序
from    Scores
;

RANK()

select  ROW_NUMBER() OVER (ORDER BY SCORE DESC) AS [RANK]
        ,*
from    Scores
;

select  RANK() OVER (ORDER BY SCORE DESC) AS [RANK]
        ,*
from    Scores
;

NTILE()

定義:NTILE(N)函數(shù)是將數(shù)據(jù)分成N塊,然后再添加1~N的序號(hào)。

select  *
        ,NTILE(1) OVER (ORDER BY SCORE DESC) AS 分區(qū)后排序
from    Scores
;
select  *
        ,NTILE(2) OVER (ORDER BY SCORE DESC) AS 分區(qū)后排序
from    Scores
;
select  *
        ,NTILE(3) OVER (ORDER BY SCORE DESC) AS 分區(qū)后排序
from    Scores
;

ROWS|RANGE

select  *
        ,SUM(Salary) OVER(PARTITION BY groupname ORDER BY ID ROWS between CURRENT ROW and 5 FOLLOWING) 從當(dāng)前行開(kāi)始后5行的和
from    Employee

參考

https://www.modb.pro/db/42912

總結(jié)

到此這篇關(guān)于SQL窗口函數(shù)OVER用法的文章就介紹到這了,更多相關(guān)SQL窗口函數(shù)OVER內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺談MySQL和Lucene索引的對(duì)比分析

    淺談MySQL和Lucene索引的對(duì)比分析

    下面小編就為大家?guī)?lái)一篇MySQL和Lucene索引的對(duì)比分析。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-09-09
  • SQL如何按照年月來(lái)查詢(xún)數(shù)據(jù)問(wèn)題

    SQL如何按照年月來(lái)查詢(xún)數(shù)據(jù)問(wèn)題

    這篇文章主要介紹了SQL如何按照年月來(lái)查詢(xún)數(shù)據(jù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • mysql存儲(chǔ)過(guò)程之返回多個(gè)值的方法示例

    mysql存儲(chǔ)過(guò)程之返回多個(gè)值的方法示例

    這篇文章主要介紹了mysql存儲(chǔ)過(guò)程之返回多個(gè)值的方法,結(jié)合實(shí)例形式分析了mysql存儲(chǔ)過(guò)程返回多個(gè)值的實(shí)現(xiàn)方法與PHP調(diào)用技巧,需要的朋友可以參考下
    2019-12-12
  • Mysql離線(xiàn)安裝8.0.26的圖文教程

    Mysql離線(xiàn)安裝8.0.26的圖文教程

    這篇文章主要介紹了Mysql離線(xiàn)安裝8.0.26的圖文教程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02
  • mysql查詢(xún)連續(xù)記錄方式

    mysql查詢(xún)連續(xù)記錄方式

    這篇文章主要介紹了mysql查詢(xún)連續(xù)記錄方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • MySQL關(guān)聯(lián)查詢(xún)優(yōu)化實(shí)現(xiàn)方法詳解

    MySQL關(guān)聯(lián)查詢(xún)優(yōu)化實(shí)現(xiàn)方法詳解

    在數(shù)據(jù)庫(kù)的設(shè)計(jì)中, 我們通常都是會(huì)有很多張表 , 通過(guò)表與表之間的關(guān)系建立我們想要的數(shù)據(jù)關(guān)系, 所以在多張表的前提下, 多表的關(guān)聯(lián)查詢(xún)就尤為重要,這篇文章主要介紹了MySQL關(guān)聯(lián)查詢(xún)優(yōu)化
    2022-11-11
  • mysql索引最左原則實(shí)例代碼

    mysql索引最左原則實(shí)例代碼

    這篇文章主要給大家介紹了關(guān)于mysql索引最左原則的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用mysql具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • MySQL中NULL和空值的區(qū)別及說(shuō)明

    MySQL中NULL和空值的區(qū)別及說(shuō)明

    這篇文章主要介紹了MySQL中NULL和空值的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • 詳解MySQL如何避免克隆失敗后再次初始化

    詳解MySQL如何避免克隆失敗后再次初始化

    本文章討論了當(dāng)您沒(méi)有足夠的磁盤(pán)空間來(lái)存儲(chǔ)兩個(gè)數(shù)據(jù)集時(shí),使用帶有安全選項(xiàng)DATA DIRECTORY 的 CLONE INSTANCE 命令,所以接下來(lái)小編給大家詳細(xì)的介紹一下,MySQL如何避免克隆失敗后再次初始化,需要的朋友可以參考下
    2023-10-10
  • Mysql并發(fā)常見(jiàn)的死鎖及解決方法

    Mysql并發(fā)常見(jiàn)的死鎖及解決方法

    死鎖是在并發(fā)執(zhí)行的過(guò)程中,兩個(gè)或多個(gè)事務(wù)相互等待對(duì)方釋放資源的情況,本文主要介紹了Mysql并發(fā)常見(jiàn)的死鎖及解決方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-12-12

最新評(píng)論