本文将为您介绍SQL中的分析函数,除了ORDER BY(按…排序)语句外,分析函数是一条查询被执行的操作,供您参考,希望对您学习SQL函数的使用能够有所帮助 。
所有合并、WHERE、GROUP BY、HAVING语句都是分析函数处理之前完成的 。
因此,分析函数只出现在选择目录或ORDER BY(按…排序)语句中 。
使用Over语句的情况 :
A. 等级函数如, ROW_NUMBER, DENSE_RANK, RANK, NTILE 使用 OVER(ORDER BY) 语句
example.
- view sourceprint?01 USE AdventureWorks;
-
- 02 GO
-
- 03 SELECT c.FirstName, c.LastName
-
- 04 ,ROW_NUMBER() OVER(ORDER BY SalesYTD DESC) AS Row Number
-
- 05 ,s.SalesYTD, a.PostalCode
-
- 06 FROM Sales.SalesPerson s
-
- 07 INNER JOIN Person.Contact c
-
- 08 ON s.SalesPersonID = c.ContactID
-
- 09 INNER JOIN Person.Address a
-
- 10 ON a.AddressID = c.ContactID
-
- 11 WHERE TerritoryID IS NOT NULL
-
- 12 AND SalesYTD <> 0;
-
- 13 GO
-
-
ROW_NUMBER() 增添顺序序号,即时存在相同的也递增序号
RANK()相同的数据序号相同,接下来为跳号(是跳跃排序,有两个第二名时接下来就是第四名)
dense_rank()相同的数据序号相同,接下来顺序递增序号(是连续排序,有两个第二名时仍然跟着第三名)
ntile(N)将记录分为N组 。
B. 聚合函数如, SUM,AVG,COUNT,MIN,MAX等使用OVER(PARTITION BY)语句
Example.
- 01 Copy Code
-
- 02 USE AdventureWorks;
-
- 03 GO
-
- 04 SELECT SalesOrderID, ProductID, OrderQty
-
- 05 ,SUM(OrderQty) OVER(PARTITION BY SalesOrderID) AS Total
-
- 06 ,AVG(OrderQty) OVER(PARTITION BY SalesOrderID) AS Avg
-
- 07 ,COUNT(OrderQty) OVER(PARTITION BY SalesOrderID) AS Count
-
- 08 ,MIN(OrderQty) OVER(PARTITION BY SalesOrderID) AS Min
-
- 09 ,MAX(OrderQty) OVER(PARTITION BY SalesOrderID) AS Max
-
- 10 FROM Sales.SalesOrderDetail
-
- 11 WHERE SalesOrderID IN(43659,43664);
-
- 12 GO
-
-