一、排名函数
排名函数可以根据这些函数的参数计算结果集中行的排名。
1. RANK()函数
RANK()函数计算每行在结果集中的排名,具有相同值的行将得到相同的排名,并且在缺少排名的位置将会跳过。
SELECT name, score, RANK() OVER (ORDER BY score DESC) AS 'Rank'
FROM score_tbl
以上示例代码中,我们用RANK()函数得出了每一个人的排名。
2. DENSE_RANK()函数
DENSE_RANK()函数与RANK()函数很相似,它会在排名列中不跳过任何排名。它还会为具有相同值的行得出相同的分数。
SELECT name, score, DENSE_RANK() OVER (ORDER BY score DESC) AS 'Rank'
FROM score_tbl
以上示例代码中,我们用DENSE_RANK()函数得出了每一个人的排名,相比较而言,DENSE_RANK()得出的排名没有跳过任何数字。
3. ROW_NUMBER()函数
ROW_NUMBER()函数会离线计算,为结果集中的每行生成唯一的行号。即使在结果集中该行的排名与它所处的顺序不同,也始终会生成唯一的行号。
SELECT name, score, ROW_NUMBER() OVER (ORDER BY score DESC) AS 'Rank'
FROM score_tbl
以上示例代码中,我们用ROW_NUMBER()函数得出了每一个人的排名,该函数计算结果集中的每行,生成唯一的行号。
二、分析函数
分析函数是SQL Server 2005中的新特性。这些函数允许用户在查询时,将查询扩展为新的维度,而无需将数据返回到客户端。这样可以更快地执行查询,并允许更灵活的查询。
1. SUM()函数
SUM()函数返回指定列的数字的总和。
SELECT product_name, sales_amount, SUM(sales_amount) OVER (PARTITION BY product_category ORDER BY sales_amount DESC) AS 'Total Sales'
FROM sales_tbl
以上示例代码中,我们使用了SUM()函数来计算每个产品的销售总额。
2. AVG()函数
AVG()函数返回指定列的数字的平均值。
SELECT product_name, sales_amount, AVG(sales_amount) OVER (PARTITION BY product_category ORDER BY sales_amount DESC) AS 'Avg Sales'
FROM sales_tbl
以上示例代码中,我们使用了AVG()函数来计算每个产品的平均销售额。
3. MAX()函数
MAX()函数返回指定列的数字的最大值。
SELECT product_name, sales_amount, MAX(sales_amount) OVER (PARTITION BY product_category ORDER BY sales_amount DESC) AS 'Max Sales'
FROM sales_tbl
以上示例代码中,我们使用了MAX()函数来计算每个产品的最大销售额。
4. MIN()函数
MIN()函数返回指定列的数字的最小值。
SELECT product_name, sales_amount, MIN(sales_amount) OVER (PARTITION BY product_category ORDER BY sales_amount DESC) AS 'Min Sales'
FROM sales_tbl
以上示例代码中,我们使用了MIN()函数来计算每个产品的最小销售额。
5. COUNT()函数
COUNT()函数返回指定列中具有值的行数。
SELECT product_name, sales_amount, COUNT(sales_amount) OVER (PARTITION BY product_category ORDER BY sales_amount DESC) AS 'Count Sales'
FROM sales_tbl
以上示例代码中,我们使用了COUNT()函数来计算每个产品的销售数量。
6. FIRST_VALUE()函数
FIRST_VALUE()函数返回指定列的第一个值。
SELECT product_name, sales_amount, FIRST_VALUE(sales_amount) OVER (PARTITION BY product_category ORDER BY sales_amount DESC) AS 'First Sales'
FROM sales_tbl
以上示例代码中,我们使用了FIRST_VALUE()函数来计算每个产品的第一个销售额。
7. LAST_VALUE()函数
LAST_VALUE()函数返回指定列的最后一个值。
SELECT product_name, sales_amount, LAST_VALUE(sales_amount) OVER (PARTITION BY product_category ORDER BY sales_amount DESC) AS 'Last Sales'
FROM sales_tbl
以上示例代码中,我们使用了LAST_VALUE()函数来计算每个产品的最后一个销售额。
8. LEAD()函数
LEAD()函数返回指定列的下一个值。
SELECT product_name, sales_amount, LEAD(sales_amount) OVER (PARTITION BY product_category ORDER BY sales_amount DESC) AS 'Next Sales'
FROM sales_tbl
以上示例代码中,我们使用了LEAD()函数来计算每个产品的下一个销售额。
9. LAG()函数
LAG()函数返回指定列的前一个值。
SELECT product_name, sales_amount, LAG(sales_amount) OVER (PARTITION BY product_category ORDER BY sales_amount DESC) AS 'Previous Sales'
FROM sales_tbl
以上示例代码中,我们使用了LAG()函数来计算每个产品的前一个销售额。