窗口函数
窗口函数的前缀
- RANK DENSE_RANK ROW_NUMBER等排序函数
- SUM AVG COUNT MAX MIN 等聚合函数
RANK:计算排序时,如果存在相同的记录,则会跳过之后的位次 1,1,1,4
DENSE_RANK: 计算排序时,即使存在相同位次的记录,也不会跳过之后的位次1,1,1,2
ROW_NUMBER:赋予唯一的连续位次 1,2,3,4
具体用法
SELECT 列1,列2,列3, RANK() OVER(PARTITION BY 列2 ORDER BY 列3)as 别名 FROM 表名
示例
- sales表里有字段Year, country, product, profit
需求1:求每个国家的profit总和
SELECT SUM(profit) from sales
group by country
要是还想保留year等字段呢?
SELECT year, product, sum(profit) over(partition by country) as profit_country
from sales
order by Year, product
需求2:求每门功课成绩前三的同学
SELECT * FROM
(SLECT ROW_NUMBER() OVER (PARTITION BY lesson order by score from c) 排名 as t
where 排名 <=3