sql自学笔记(十九)——MySQL8.0版本的新特性(九)

窗口函数

基本概念

  • MySQL8.0支持窗口函数(Windows Function),也称分析函数。
  • 窗口函数与分组聚合函数类似,但是 每一行数据都生成一个结果
  • 聚合窗口函数:SUM/AVG/COUNT/MAX/MIN等等。
    首先创建一张表,如图所示:
select * from sales;
利润表

首先先来回顾一下聚合函数
例,按照国家来计算一下每一个国家的利润总和

     select country,sum(profit) as country _ profit 
 -> from sales
 -> group by 0country
 -> order by country;

同样的sum()函数作为分析函数的写法

   select year,country,product,profit,
 -> sum(profit) over(partition by country), as country _ profit
 ->  from sales
 -> order by country,year,product,profit;

不光是sum()函数,其他函数依然也可以,
例如想看利润的平均值



这种分析函数的方式它可以保留我们原来数据的结构,更适合作报表分析。

专用窗口函数

ROW _ NUMBER() / RANK()/DENSE _ RANK() / PERCENT _ PANK()

这些函数都是用于获取排名

FIRST _ VALUE() / LAST _ VALUE() / LEAD() / LAG()

他们用于获取窗口或者分组类的第一名和最后一名,LEAD()和LAG()他们用于返回相对>于我们当前这个数据它的前面的第几名或者它后面的第几名。

CUME _ DIST() / NTH _ VALUEC() / NTTLE()

CUME _ DIST()这是用作数据分析中的累积分布,也就是累积到现在这个数据占了多少
NTH _ VALUEC() 这个函数表示排名第几名
NTTLE() 这个函数作数据分析经常使用的,作四分之一百分位用。
示例:首先提前创建一张表

select * from numbers;
  1.select val,row _ number(LOVER(order by val) as by val) as 'row _ number'
-> from numbers;

我们可以看到左边是原始数据,右边是这个值在整个数据集当中的一个排名顺序。

  2.select val,
-> first _ value(val) over (order by val) as 'first',
-> lead(val,1) over (order by val) as 'lead'
-> from numbers;

如图,val是原始数据,first是排名当中的第一名,lead表示它的前面一位的值。

  3.select val,
-> ntile(4) over(order by val) as 'ntile 4'
-> from numbers;

它返回的是当前数据所占的百分位,百分位有四个,第一个百分位。就是说它属于前面的25%,第二个百分位就是它属于前面的一半。后面依次类推。

你可能感兴趣的:(sql自学笔记(十九)——MySQL8.0版本的新特性(九))