SQL 开窗函数是一种在表中的一系列行上执行计算(如求和、平均值、排名等),并将结果与表中其他行进行比较的函数。相较于传统的聚合函数,开窗函数的特点在于可以同时访问多行,并且这些行可以按照指定的顺序进行排序。
常用的开窗函数包括:
- ROW_NUMBER(): 返回笛卡尔积中的行数,通常用于为每个分组中的行分配一组唯一的数字。
- RANK(): 返回排名,如果有重复值,则返回相同的排名,下一个排名将从重复值的下一个排名开始。
- DENSE_RANK(): 返回排名,如果有重复值,则返回相同的排名,下一个排名将从最后一个重复值的下一个排名开始。
- SUM()、AVG()、MAX()、MIN(): 在窗口中计算指定字段的统计数据。
- LEAD()、LAG(): 返回指定字段的前一个或后一个行的值。
- 获取每个部门中的销售额排名(ranks)
-
SELECT department, employee, sales, RANK() OVER ( PARTITION BY department ORDER BY sales DESC ) as ranks FROM sales_table ORDER BY department, ranks
department employee sales ranks A Mary 1500 1 A Tom 1200 2 A John 1000 3 B Bob 1100 1 B Cathy 900 2 B Alice 800 3 C David 2000 1 C Emma 1700 2 C Frank 1500 3