本文将为您介绍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
【编辑推荐】