<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
聚合函數對一組值執行計算,並返回單個值。
除了 COUNT
外,聚合函數都會忽略 Null 值。 聚合函數經常與 SELECT 語句的 GROUP BY 子句一起使用。
OVER 子句可以跟在除 STRING_AGG、GROUPING 或 GROUPING_ID 函數以外的所有聚合函數後面。
只能在以下位置將聚合函數作為表示式使用:
T-SQL提供的聚合函數一共有13個之多。
avg( [ all | distinct ] expression )
AVG函數用於計算精確型或近似型資料型別的平均值,bit型別除外,忽略null值。AVG函數計算時將計算一組數的總和,然後除以為null的個數,得到平均值
select avg(distinct age) from person -- 查詢person表裡的年齡的平均值,相同值只計算一次
MIN函數用於計算最小值,MIN函數可以適用於numeric、char、varchar或datetime、money或smallmoney列,但不能用於bit列。不允許使用聚合函數和子查詢,忽略null值。
MAX函數用於計算最大值,忽略null值。max函數可以使用於numeric、char、varchar、money、smallmoney、或datetime列,但不能用於bit列。不允許使用聚合函數和子查詢。
SUM函數用於求和,只能用於精確或近似數位型別列(bit型別除外),忽略null值,不允許使用聚合函數和子查詢。
count函數用於計算滿足條件的資料項數,返回int資料型別的值。這裡的表示式是除text、image或ntext以外任何資料型別的表示式。但不允許使用聚合函數和子查詢。
注意:count(欄位名),如果欄位名為NULL,則count函數不會統計。例如count(name),如果name為空,則不會統計到結果
select count(distinct age) from person -- 查詢person表裡的年齡唯一且非空的項數
返回組中的項數。 COUNT_BIG 的用法與 COUNT 函數類似。 兩個函數唯一的差別是它們的返回值。 COUNT_BIG 始終返回 bigint 資料型別值。 COUNT 始終返回 int 資料型別值。
這裡的expression必須是一個數值表示式,不允許使用聚合函數和子查詢。表示式的值是精確或近似數值型別,但不包括bit資料型別。將忽略null值。
返回指定表示式中所有值的總體標準偏差。
VAR函數用於計算指定表示式中所有值的方差。 這裡的expression表示式必須是一個數值表示式,不允許使用聚合函數和子查詢。表示式的值是精確或近似數值型別,但不包括bit資料型別,將忽略null值。
返回指定表示式中所有值的總體統計方差。
返回組中各值的校驗和。 將忽略 Null 值。CHECKSUM_AGG 可用於檢測表中的更改。表中行的順序不影響 CHECKSUM_AGG 的結果。此外,CHECKSUM_AGG 函數還可與 DISTINCT 關鍵字和 GROUP BY 子句一起使用。如果表示式列表中的某個值發生更改,則列表的校驗和通常也會更改。但只在極少數情況下,校驗值會保持不變。
CHECKSUM_AGG ( [ ALL | DISTINCT ] expression )
引數說明:
SELECT CHECKSUM_AGG(Account_Age) FROM Account GO UPDATE Account SET Account_Age = 30 WHERE Account_Id = 6 GO SELECT CHECKSUM_AGG(Account_Age) FROM Account
顯示結果如下:
可見隨著表的更改,該系統函數返回的值也變了。此函數的作用正在於此,檢測表的更改。
MS SQL Server的2017新增了STRING_AGG()是一個聚合函數,它將由指定的分隔符分隔將字序列連線成一個字串。 它不會在結果字串的末尾新增分隔符。
以下是STRING_AGG()
函數的語法:
STRING_AGG ( input_string, separator ) [ order_clause ]
在這個語法中:
input_string
是串聯時可以轉換為VARCHAR
和NVARCHAR
的型別。separator
是結果字串的分隔符。它可以是文字或變數。order_clause
使用WITHIN GROUP
子句指定連線結果的排序順序:WITHIN GROUP ( ORDER BY expression [ ASC | DESC ] )
STRING_AGG()
忽略NULL
,並且在執行連線時不會為NULL
新增分隔符。
下面將使用範例資料庫中的sales.customers
表進行演示:
此範例使用STRING_AGG()
函數生成城市客戶的電子郵寄清單:
SELECT city, STRING_AGG(email,';') email_list FROM sales.customers GROUP BY city;
執行上面查詢語句,得到以下結果:
要對email
列表進行排序,請使用WITHIN GROUP
子句:
SELECT city, STRING_AGG(email,';') WITHIN GROUP (ORDER BY email) email_list FROM sales.customers GROUP BY city;
執行上面查詢語句,得到以下結果:
注意:STRING_SPLIT()函數:一個表值函數,它根據指定的分隔符將字串拆分為子字序列。
SELECT value FROM STRING_SPLIT('Lorem ipsum dolor sit amet.', ' ');
SQL Server 2019引入了新函數Approx_Count_distinct以提供行的近似計數。Count(distinct())函數提供實際的行數。
該函數APPROX_COUNT_DISTINCT應該使用較少的記憶體和CPU資源,以便可以獲取資料結果而不會出現任何問題,例如溢位到磁碟或CPU峰值。這對於數十億行的需求很有用。
查詢出插入的全部資料:
select * from dbo.PeopleInfo
select [name],numb,sum(fenshu) from dbo.PeopleInfo group by [name],numb //用group by select [name],numb,sum(fenshu) from dbo.PeopleInfo group by [name],numb with cube; //用with cube select [name],numb,sum(fenshu) from dbo.PeopleInfo group by [name],numb with rollup //用with rollup
當行由 CUBE 或 ROLLUP 運運算元新增時,該函數將導致附加列的輸出值為 1;當行不由 CUBE 或 ROLLUP 運運算元新增時,該函數將導致附加列的輸出值為 0。
僅在與包含 CUBE 或 ROLLUP 運運算元的 GROUP BY 子句相關聯的選擇列表中才允許分組。
select [name],numb,grouping(numb) from dbo.PeopleInfo group by [name],numb with rollup
僅當指定了 GROUP BY 時,GROUPING_ID 才能在 SELECT 列表、HAVING 或 ORDER BY 子句中使用。 使用 GROUPING_ID 標識分組級別下面的範例返回按 AdventureWorks2012 資料庫的 Name 和 Title 彙總的僱員計數以及 Name, 和公司總計。 GROUPING_ID() 用於為 Title 列中的每行建立一個值以標識聚合級別。
SELECT D.Name ,CASE WHEN GROUPING_ID(D.Name, E.JobTitle) = 0 THEN E.JobTitle WHEN GROUPING_ID(D.Name, E.JobTitle) = 1 THEN N'Total: ' + D.Name WHEN GROUPING_ID(D.Name, E.JobTitle) = 3 THEN N'Company Total:' ELSE N'Unknown' END AS N'Job Title' ,COUNT(E.BusinessEntityID) AS N'Employee Count' FROM HumanResources.Employee E INNER JOIN HumanResources.EmployeeDepartmentHistory DH ON E.BusinessEntityID = DH.BusinessEntityID INNER JOIN HumanResources.Department D ON D.DepartmentID = DH.DepartmentID WHERE DH.EndDate IS NULL AND D.DepartmentID IN (12,14) GROUP BY ROLLUP(D.Name, E.JobTitle);
很多聚合函數都可以用作視窗函數的運算,如SUM,AVG,MAX,MIN。聚合開窗函數只能使用PARTITION BY子句或都不帶任何語句,ORDER BY不能與聚合開窗函數一同使用。例如,查詢僱員的定單總數及定單資訊。
WITH OrderInfo AS ( SELECT COUNT(OrderID) OVER(PARTITION BY EmployeeID) AS TotalCount,OrderID,CustomerID, EmployeeID,OrderDate FROM Orders (NOLOCK) ) SELECT OrderID,CustomerID, EmployeeID ,OrderDate,TotalCount From OrderInfo ORDER BY EmployeeID
如果視窗函數不使用PARTITION BY 語句的話,那麼就是不對資料進行分組,聚合函數計算所有的行的值。
WITH OrderInfo AS ( SELECT COUNT(OrderID) OVER() AS Count,OrderID,CustomerID, EmployeeID,OrderDate FROM Orders (NOLOCK) )
到此這篇關於SQL Server聚合函數的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45