MYSQL系列(1)窗口函数

窗口函数

窗口函数的前缀

  1. RANK DENSE_RANK ROW_NUMBER等排序函数
  2. 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 表名

示例

  1. 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
原文地址:https://www.cnblogs.com/yangjiez/p/11942368.html