SQL 中的窗口函数(Window Functions)是一种特殊的函数,它可以在查询结果的某个区间内执行计算,而不仅仅是对单个行进行计算。
以下是一些常用的窗口函数:
1、ROW_NUMBER()
ROW_NUMBER() 函数可以给查询结果的每一行分配一个唯一的数字。通常,我们可以使用 ROW_NUMBER() 来按照特定的列对查询结果进行排序。
例如,以下 SQL 查询会按照 “sales” 表中 “amount” 列的降序排列,并给每行分配一个唯一的数字:
SELECT ROW_NUMBER() OVER (ORDER BY amount DESC) AS row_num, *
FROM sales;
2、RANK() 和 DENSE_RANK()
RANK() 和 DENSE_RANK() 函数可以为查询结果中的每一行分配排名。不同之处在于,如果有多个行具有相同的值,则 DENSE_RANK() 不会跳过排名。
例如,以下 SQL 查询会按照 “sales” 表中 “amount” 列的升序排列,并为每个值分配一个排名:
SELECT amount, RANK() OVER (ORDER BY amount) AS rank,
DENSE_RANK() OVER (ORDER BY amount) AS dense_rank
FROM sales;
3、SUM()、AVG()、MIN() 和 MAX()
SUM()、AVG()、MIN() 和 MAX() 函数可以用于计算查询结果的某个区间内的汇总、平均值、最小值和最大值。
例如,以下 SQL 查询会计算 “sales” 表中 “amount” 列的累计和,并为每个值分配一个唯一的数字:
SELECT amount, SUM(amount) OVER (ORDER BY date) AS running_total
FROM sales;
以上是一些常用的窗口函数,窗口函数在 SQL 中使用非常广泛,并且可以让我们在查询结果中执行更复杂的计算和分析。
案例
分数排名
sql语句:
# Write your MySQL query statement below
select score,dense_rank()
over (order by score desc) as 'rank'
from Scores;