翻譯|使用教程|編輯:王香|2018-12-14 09:46:07.000|閱讀 268 次
概述:在本文我們將討論用于形成值的函數(shù)本身。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
在本文的第二部分,我們將討論用于形成值的函數(shù)本身。窗口函數(shù)根據(jù)與當(dāng)前行關(guān)聯(lián)的一組數(shù)據(jù)計(jì)算值,即,如果使用分區(qū)依據(jù),則來自同一組的數(shù)據(jù)。用于 分組的常規(guī)聚合函數(shù)需要對行進(jìn)行分組,從而從樣本中丟失必要的唯一信息。因此,有必要使用兩個而不是單個請求,以便擁有所有必要的數(shù)據(jù)和按組的總和。窗口聚合函數(shù)允許在一個查詢 中實(shí)現(xiàn)相同的結(jié)果。窗口是一組用于計(jì)算函數(shù)的線。OVER指令將整個行集拆分為單獨(dú)的組 - 根據(jù)指定條件的窗口。 我們來談?wù)劥翱诤?數(shù)的類型。有三組目的地:
為了演示函數(shù)的工作原理,我將使用一個簡單的表:
CREATE TABLE ForWindowFunc (ID INT, GroupId INT, Amount INT) GO INSERT INTO ForWindowFunc (ID, GroupId, Amount) VALUES(1, 1, 100), (1, 1, 200), (1, 2, 150), (2, 1, 100), (2, 1, 300), (2, 2, 200), (2, 2, 50), (3, 1, 150), (3, 2, 200), (3, 2, 10);
SUM()函數(shù)就像常規(guī)聚合函數(shù)一樣 - 它匯總了數(shù)據(jù)集中給定列的所有值。但是,由于OVER()指令,我們將數(shù)據(jù)集分解為窗口。根據(jù)ORDER BY子句中指定的順序在窗口內(nèi)執(zhí)行求和。讓我們看一個簡 單的例子 - 三組的總和。
SELECT ID, Amount, SUM(Amount) OVER (ORDER BY id) AS SUM FROM ForWindowFunc
為方便起見,窗戶以不同顏色突出顯示。窗口中的所有值都具有相同的金額 - 窗口中所有金額的總和。
讓我們在選擇中添加另一列并更改OVER指令:
SELECT ID, GroupId, Amount, SUM(Amount) OVER (Partition BY id ORDER BY id, GroupId) AS SUM FROM ForWindowFunc
如您所見,由于GroupId字段,現(xiàn)在每個窗口都被分成組。現(xiàn)在每個小組都有自己的金額。 現(xiàn)在,讓我們在每個窗口中創(chuàng)建一個累積結(jié)果:
SELECT ID, GroupId, Amount, SUM(Amount) OVER (Partition BY id ORDER BY id, GroupId, Amount) AS SUM FROM ForWindowFunc
我們不再需要GroupId字段,因此我們將其從選擇中刪除。現(xiàn)在,對于窗口中的每一行,計(jì)算總計(jì),即金額的當(dāng)前值與之前所有金額的總和。
此函數(shù)計(jì)算平均值。它可以與句子Partition by和Order by一起使用。
SELECT ID, Amount, AVG(Amount) OVER (Partition BY id ORDER BY id) AS AVG FROM ForWindowFunc
窗口中的每一行都有一個平均值A(chǔ)mount,它由公式計(jì)算:所有Amount /為行數(shù)的總和。 此函數(shù)的行為類似于SUM()。
從函數(shù)的名稱可以清楚地看到它返回窗口中的最小值。
SELECT ID, Amount, MIN(Amount) OVER (Partition BY id ORDER BY id) AS MIN FROM ForWindowFunc
如您所見,在Min列中,窗口中顯示最小Amount值。
MAX函數(shù)的工作方式與MIN相同,它只給出窗口中字段的最大值:
SELECT ID, Amount, MAX(Amount) OVER (Partition BY id ORDER BY id) AS MAX FROM ForWindowFunc
一切都很清楚。在第一組中,最大金額為200,第二組為300,第三組為200。
此函數(shù)返回窗口中的行數(shù)。
SELECT ID, Amount, COUNT(Amount) OVER (Partition BY id ORDER BY id) AS COUNT FROM ForWindowFunc
使查詢更復(fù)雜一點(diǎn),并添加GroupId字段。
SELECT ID, GroupId, Amount, COUNT(Amount) OVER (Partition BY id ORDER BY id, GroupId) AS COUNT FROM ForWindowFunc
在這種情況下,它更有趣。我們來看看第一個窗口。對于第一行和第二行,記錄數(shù)為2.但對于第三行,該值已經(jīng)為3.我們設(shè)法累積了累計(jì)金額等組中的金額。 如果我們?nèi)?然需要每個組中的數(shù)字, 則需要將GroupId添加到Partition by子句中。
SELECT ID, GroupId, Amount, COUNT(Amount) OVER (Partition BY id, GroupId) AS COUNT FROM ForWindowFunc
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn