排名函数
排名函数的常用使用格式:函数名() over (order by 列名 [asc|desc][,列名……])
注意:返回结果集会根据使用排名函数时指定的列进行排序,因此不要在 from 子句后面再次使用 order by,会导致排名混乱。
函数名称
参数 示例 描述
row_number无参数
select roductID,[Name],ListPrice, row_number()
over(order by ListPrice desc) as rank from Production.Product
为结果集内每一行进行编号,从1开始后面行依次加 1。
rank无参数
select ProductID,[Name],ListPrice,rank()
over(order by ListPrice desc) as rank
from Production.Product
如果两个或多个行与一个排名关联,则每个关联行将得到相同的排名,排名不连续。例如,如果有价格最高的两种产品的价格相同,它们将列第一。由于已有两行排名在前,所以具有下一个最高价格的产品将排名第三。该排名等于该行之前的所有行数加一。因此,
RANK 函数并不总返回连续整数。
dense_rank
无参数
select
ProductID,[Name],ListPrice,dense_rank()
over(order by ListPrice desc) as rank
from Production.Product
如果两个或多个行与一个排名关联,则每个关联行将得到相同的排名,排名连续。
例如,如果有价格最高的两种产品的价格相同,它们将并列第一,下一个最高价
格的产品将排名第二。因此,
DENSE_RANK 函数返回的数字没有间断,并且始
终具有连续的排名。
聚合函数
聚合函数对一组值执行计算
,并返回单个值。除了 COUNT 以外,聚合函数都会忽略空值。聚合函数经常与 SELECT 语句的 GROUP BY 子句一起使用。聚合函数的常用使用格式:函数名([all|distinct] 表达式)
all:默认值,对所有的值进行聚合函数运算包含重复值。distinct: 消除重复值后进行聚合函数运算。
函数名称 示例 描述
avg
SELECT avg(VacationHours)as '平均休假小时数'
FROM HumanResources.Employee
WHERE Title LIKE 'Vice President%'
返回 25
返回组中各值的平均值。空值将被忽略。 表达式为数值表达式。
count
SELECT count(*)FROM Production.Product 返回504
SELECT count(Color)FROM Production.Product 返回 256
SELECT count(distinct Color)FROM Production.Product
返回 9
返回组中的项数。COUNT(*) 返回组中的项数。包括 NULL 值和重复项。如果指定
表达式则忽略空值。表达式为任意表达式。
min
select min(ListPrice)from Production.Product返回0
返回组中的最小值。空值将被忽略。表达式为数值表达式,字符串表达式,日期。
max
select max(ListPrice) from Production.Product
返回3578.27
返回组中的最大值。空值将被忽略。表达式为数值表达式,字符串表达式,日期。
sum
SELECT sum(SickLeaveHours) as '总病假小时数'
FROM HumanResources.Employee
WHERE Title LIKE 'Vice President%'; 返回97
返回组中所有值的和。空值将被忽略。表达式为数值表达式