SQL技能 - 窗口函数
创始人
2024-05-31 22:57:08
0

SQL技能 - 窗口函数

  • 1. 排序函数
    • 1.1. 不分组排序
    • 1.2. 分组排序
  • 2. 聚合函数实现滑动窗口计算
    • 2.1. 常用聚合函数
    • 2.2. 滑动行范围的常用表达
    • 2.3. 示例
  • 3. lag、lead函数求增长率(同比、环比)

窗口函数表达式:
function(arg) OVER ([PARTITION BY expression][ORDER BY expression [ASC|DESC]][frame])

1. 排序函数

排序函数示例备注
row_number()1,2,3…序号不重复,序号连续
rank()1,2,2,4…序号可以重复,序号不连续
dense_rank()1,2,2,3…序号可以重复,序号连续

1.1. 不分组排序

在这里插入图片描述

select 
score,
dense_rank() over(order by score desc) as `rank`
from scores

1.2. 分组排序

在这里插入图片描述
在这里插入图片描述

select c.department,c.employee,c.salary
from 
(select
b.name as department,
a.name as employee,
a.salary,
rank() over(partition by departmentid order by salary desc) as salary_rank
from employee a
inner join department b on a.departmentid = b.departmentid) c where c.salary_rank = 1

2. 聚合函数实现滑动窗口计算

2.1. 常用聚合函数

聚合函数说明
COUNT(col)返回所有非空值的个数
AVG(col)返回平均值
SUM(col)返回总和
MAX(col)返回最大值
MIN(col)返回最小值
FIRST(col)返回第一个记录的值
LAST(col)返回最后一个记录的值

2.2. 滑动行范围的常用表达

{RANGE|ROWS} frame_start
{RANGE|ROWS} between frame_start AND frame_end

rows模式:按物理行来进行划分
range模式:按数值逻辑来进行划分

frame_start / frame_end的五种表达说明
UNBOUNDED PRECEDING从开始行
expression PRECEDING往前推n行(只适用于rows模式)
CURRENT ROW当前行
expression FOLLOWING往后推n行(只适用于rows模式)
UNBOUNDED FOLLOWING到结束行

默认:BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW

2.3. 示例

在这里插入图片描述
在这里插入图片描述

3. lag、lead函数求增长率(同比、环比)

同比就是比去年同期,环比就是这个月比上个月,单位不一定是月,可以是任何时间单位。
同比计算方式:同比增长率 = (本期数 - 同期数) ÷ 同期数 * 100%
环比计算方式:环比增长速度 = (本期数 - 上期数) ÷ 上期数 * 100%

前后函数说明
lead(expression,n)返回当前行的后n行
lag(expression,n)返回当前行的前n行

求环比:
在这里插入图片描述

相关内容

热门资讯

三年级作文猴子下山【通用6篇... 三年级作文猴子下山 篇一猴子下山的故事,是我们小时候听过的经典故事之一。今天,我要给大家讲一个不同寻...
小学三年级作文我是妈妈的小助... 小学三年级作文我是妈妈的小助手 篇一我是妈妈的小助手我是一个小学三年级的学生,我有一个非常好的妈妈。...
三年级作文我当小家长400字... 三年级作文我当小家长400字作文大全 篇一作为三年级的小学生,我有着当小家长的责任和义务。今天,我要...
谁是我的老师作文三年级49篇... 谁是我的老师作文三年级49篇 篇一我亲爱的老师在我三年级的时候,我遇到了很多不同的老师。有的是我的班...
春节小学三年级作文300字(... 春节小学三年级作文300字 篇一快乐的春节春节是我最喜欢的节日。春节是中国最重要的传统节日,也是全家...
书的字述600字作文(优秀3... 书的字述600字作文 篇一:阅读的魅力阅读是一种独特的体验,它能够带我们进入一个全新的世界,让我们与...
三年级上册写一次游戏活动的作... 三年级上册写一次游戏活动的作文 篇一我最喜欢的游戏——躲猫猫今天,我们班组织了一次非常有趣的游戏活动...
三年级作文400字写大海(最... 三年级作文400字写大海 篇一大海大海,是一个神奇的地方。我喜欢大海,因为它给我带来了无穷的快乐和惊...
快乐的小女孩(推荐4篇) 快乐的小女孩 篇一快乐的小女孩,是一个充满活力和阳光的孩子。她总是带着灿烂的笑容,无论面对什么困难和...
我的好朋友作文三年级300字... 我的好朋友作文三年级300字 篇一我的好朋友我有一个好朋友,他叫小明。我们从小学一年级就是同班同学了...
三年级等我长胡子的时候作文(... 三年级等我长胡子的时候作文 篇一当我还是一个年幼的三年级学生时,我对长大充满了幻想和向往。我时常幻想...
三年级作文250字(精彩6篇... 三年级作文250字 篇一我的暑假生活暑假终于来了!我迫不及待地开始了我美妙的暑假生活。首先,我去了海...
三年级暑假作文300字【优选... 三年级暑假作文300字 篇一我的暑假生活暑假终于来了,我盼望了很久的假期终于到来了。这个暑假,我过得...
三年级难忘的作文不少于250... 篇一:三年级难忘的作文记得那是我三年级的一个阳光明媚的早晨,我正坐在教室里,等待着老师给我们布置作文...
猜猜他是谁三年级作文600字... 猜猜他是谁三年级作文600字9篇 篇一猜猜他是谁我有一个好朋友,他总是戴着一顶红色的帽子,穿着一件蓝...
三年级下册作文文明的一件事(... 三年级下册作文文明的一件事 篇一文明的一件事在我们的日常生活中,有许多小事都可以展现出我们的文明素养...
我是一只丑小鸭作文400字【... 我是一只丑小鸭作文400字 篇一我是一只丑小鸭我是一只丑小鸭,从出生的那一刻起,我就和其他小鸭子不一...
三年级寒假里难忘的事作文20... 三年级寒假里难忘的事作文200字 篇一冬日里的雪人今年寒假,我最难忘的事情就是和爸爸一起堆雪人了。寒...
贪吃的小猫三年级作文300字... 贪吃的小猫三年级作文300字 篇一贪吃的小猫我家养了一只非常贪吃的小猫,它的名字叫小奇。小奇是一只黄...
小学三年级作文:我的英语老师... 小学三年级作文:我的英语老师 篇一我的英语老师是一位非常亲切和蔼的老师,她叫李老师。她总是穿着漂亮的...