国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > SQL Server > 正文

SQL Server窗口函數(shù):ROWS與RANGE

2024-08-31 00:54:08
字體:
供稿:網(wǎng)友
SQL Server窗口函數(shù):ROWS與RANGE

幾乎每次我展示SQL Server里的窗口時(shí),人們都非常有興趣知道,當(dāng)你定義你的窗口(指定的一組行)時(shí),ROWSRANGE選項(xiàng)之間的區(qū)別。因此在今天的文章里我想給你展示下這些選項(xiàng)的區(qū)別,對(duì)于你的分析計(jì)算意味著什么。

ROWS與RANGE之間的區(qū)別

當(dāng)你用OVER()子句進(jìn)行你的分析計(jì)算來打開你的窗口,你也可以在窗口里看到的,通過ROWSRANGE選項(xiàng)來限制你的行數(shù)。來看下面的T-SQL語句:

 1 SELECT 2     t.OrderYear, 3     t.OrderMonth, 4     t.TotalDue, 5     SUM(t.TotalDue) OVER(ORDER BY t.OrderYear, t.OrderMonth ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS 'RunningTotal' 6 FROM 7 ( 8     SELECT 9         YEAR(OrderDate) AS 'OrderYear',10         MONTH(OrderDate) AS 'OrderMonth',11         SalesPersonID,12         TotalDue13     FROM Sales.SalesOrderHeader 14 ) AS t15 WHERE16     t.SalesPersonID = 27417     AND t.OrderYear = 200518 GO

這個(gè)T-SQL語句用SUM()聚合函數(shù)進(jìn)行匯總計(jì)算。窗口本身從第1行(UNBOUNDED PRECEDING)上至當(dāng)前行(CURRENT ROW)。對(duì)于記錄級(jí)中的每1行,窗口變得越來越大,因此很容易進(jìn)行匯總運(yùn)算。下圖演示了這個(gè)概念。

從輸出你可以看到,結(jié)果是個(gè)自增長的匯總——運(yùn)行合計(jì)匯總的結(jié)果。

現(xiàn)在假設(shè)你修改窗口為RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW,會(huì)發(fā)生什么:

 1 SELECT 2     t.OrderYear, 3     t.OrderMonth, 4     t.TotalDue, 5     SUM(t.TotalDue) OVER(ORDER BY t.OrderYear, t.OrderMonth RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS 'RunningTotal' 6 FROM 7 ( 8     SELECT 9         YEAR(OrderDate) AS 'OrderYear',10         MONTH(OrderDate) AS 'OrderMonth',11         SalesPersonID,12         TotalDue13     FROM Sales.SalesOrderHeader 14 ) AS t15 WHERE16     t.SalesPersonID = 27417     AND t.OrderYear = 200518 GO

從下圖你可以看到,你得到了不同的結(jié)果,對(duì)于2005年11月的記錄顯示同樣的匯總。

我們來嘗試?yán)斫庀聻槭裁催@里RANGE選項(xiàng)比ROWS選項(xiàng)給你不同的結(jié)果。使用ROWS選項(xiàng)你定義當(dāng)前行的固定前后記錄。這里你看到的行取決于窗口的ORDER BY從句。你也可以說你在物理級(jí)別定義你的窗口。

當(dāng)你使用RANGE選項(xiàng)事情就改變了。RANGE選項(xiàng)包含窗口里的所有行,和當(dāng)前行有相同ORDER BY值。從剛才的圖片你可以看到,對(duì)于2005年11月的2條記錄你拿到同個(gè)匯總,因?yàn)檫@2行有同樣的ORDER BY值(2005年11月)。使用RANGE選項(xiàng)你在邏輯級(jí)別定義你的窗口。如果更多的行有同個(gè)ORDER BY值,當(dāng)你使用ROWS選項(xiàng)你的窗口會(huì)包含更多的行。

小結(jié)

在今天的文章里你看到了當(dāng)你為你的分析計(jì)算定義窗口時(shí),ROWS和RANGE選項(xiàng)之間的區(qū)別。使用ROWS選項(xiàng)你在物理級(jí)別定義在你窗口里有多少行。使用RANGE選項(xiàng)取決于ORDER BY值在窗口里有多少行被包含。因此當(dāng)你使用RANGE選項(xiàng)時(shí)有性能上的巨大區(qū)別。在接下來的文章我會(huì)討論下這些副作用。

感謝關(guān)注!


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 波密县| 荔波县| 黄骅市| 仙居县| 盐城市| 嘉善县| 婺源县| 崇左市| 呈贡县| 陆川县| 顺义区| 北川| 呼图壁县| 共和县| 伊宁市| 双流县| 汪清县| 曲麻莱县| 随州市| 余江县| 闵行区| 图们市| 轮台县| 师宗县| 庆阳市| 凤翔县| 洪江市| 厦门市| 辽宁省| 通化县| 九龙城区| 册亨县| 华蓥市| 永泰县| 遂昌县| 固始县| 衡东县| 稷山县| 黄浦区| 遵化市| 延长县|