SQL窗口函数

一  什么是SQL窗口函数?

          SQL窗口函数说的是在查询现有的结果集的特定“窗口”(即数据集的一个分区或整个结果集)再作处理统计(排序,聚合统计,如count,sum等),最简单的理解就是执行两次sql,第二次执行sql是在第一次的sql查询数据上进行。

二 sql窗口函数的组成

  sql窗口函数的组成:  聚合函数(或者窗口函数) + over 两部分组成,如下图:

<聚合函数 或者 窗口函数>    OVER ([PARTITION BY <列名>] ORDER BY <排序用列名>)  

第一部分:聚合函数(或者窗口函数)

  •  聚合函数:SUM、MAX、MIN、AVG等
  •  专用窗口函数:RANK、DENSE_RANK等排序用的

第二部分:  over

  • PARTITON BY  分组,即选择要看哪个窗口,与GROUP BY 相似,但是PARTITION BY 子句并不具备GROUP BY 子句的汇总功能,不会变更或影响数据表中记录的行数。 
  • ORDER BY是用来排序,即决定窗口内,是按那种规则(字段)来排序的。 

三  SQL窗口函数使用

   1 使用sql窗口函数排名统计:

SELECT id, value,ROW_NUMBER() OVER (ORDER BY value ASC) AS row_num
FROM table_name;

2 使用 sql窗口聚合函数:

SELECT department_id, salary,avg(salary) OVER (PARTITION BY department_id) AS avg_salary
FROM employees;

 根据部门id统计部门的平均薪资。

3 环比统计(取前,取后)

SELECT sale_date,sales_amount,(sales_amount - LAG(sales_amount, 1) OVER (ORDER BY sale_date)) AS daily_change,(sales_amount / LAG(sales_amount, 1) OVER (ORDER BY sale_date)) - 1 AS percentage_change
FROM order;
  • LAG(sales_amount, 1) 获取的是前一天的销售额。
  • (sales_amount - LAG(sales_amount, 1) OVER (ORDER BY sale_date)) 计算的是每日销售额与前一天销售额的差额,即日环比绝对增量。
  • (sales_amount / LAG(sales_amount, 1) OVER (ORDER BY sale_date)) - 1 计算的是日环比增长率,即当前销售额相较于前一天的增长百分比。

四 总结

  现在很多报表都要求有环比数据,小项目,或数据量小的情况下,使用窗口函数是个不错的选择。 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/608897.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vim 用法详解

一、命令C&#xff1a;删除–>剪切–>进入插入模式 c命令详解&#xff1a; C or c$表示修改当前行上光标后面的部分. 进入编辑状态. c0 or c^表示从光标处到当前行行首的部分进行修改&#xff0c;^代表首个非空格处。 cc OR S修改当前行. 进入编辑状态. cw从光标所在…

【嵌入式移植】1、Ubuntu系统准备

Ubuntu系统准备 虚拟机与Ubuntu安装下载Ubuntu创建虚拟机系统配置 虚拟机与Ubuntu安装 嵌入式移植通常使用Linux操作系统的环境&#xff0c;使用Linux下的交叉编译工具链对BootLoader、kernel以及应用程序进行编译&#xff0c;然后下载运行。当然也可以通过各类IDE或者Windows…

从文本(.txt)文件中读取数据时出现中文乱码

前言 当需要从记事本中读取数据时&#xff0c;发现读取的数据会出现中文乱码&#xff0c;我尝试了C和C读取文件&#xff0c;发现都是这样。 乱码原因 文本文件的保存默认使用UTF-8编码方式&#xff0c;而VS编译器的编码方式是GBK&#xff0c;所以不同的编码方式导致了乱码。…

【leetcode】力扣算法之删除链表中倒数第n个节点【中等难度】

删除链表中倒数第n个节点 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 用例 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5] 输入&#xff1a;head [1], n 1 输出&#xff1a;[] 输入&#xff1a;head …

各种锁的概述

乐观锁与悲观锁 悲观锁指对数据被外界修改持保守态度&#xff0c;认为数据很容易就会被其他线程修改&#xff0c;所以在数据被处理前先对数据进行加锁&#xff0c;并在整个数据处理过程中&#xff0c;使数据处于锁定状态。 悲观锁的实现往往依靠数据库提供的锁机制&#xff0…

springboot 注解+AOP实现接口方法出入参打印

注解AOP实现接口方法出入参打印 0、前言1、自定义注解2、定义AOP3、封装日志打印方法 0、前言 针对加入spring bean容器的实例方法&#xff0c;通过注解aop实现打印方法调用的出入参&#xff0c;通过注解可以配置是否打印出入参&#xff0c;出入参中的单列集合或双列集合是否打…

计算机体系结构期末复习流程大纲

1.存储器和cache 存储器的容量、速度与价格之间的要求是相互矛盾的&#xff0c;速度越快&#xff0c;没bit位价格越高&#xff0c;容量越大&#xff0c;速度越慢&#xff0c;目前主存一般有DRAM构成。 处理器CPU访问存储器的指标&#xff1a; 延迟时间&#xff08;Latency&am…

【C++】—— 工厂模式详解

目录 &#xff08;一&#xff09;工厂模式的特点 &#xff08;二&#xff09;工厂模式分类 1、简单工厂模式 2、工厂方法模式 3、抽象工厂模式 &#xff08;三&#xff09;总结与回顾 &#xff08;一&#xff09;工厂模式的特点 1、优势 ⼯⼚模式是⼀种创建型设计模式&a…

快速入门Visual Studio 2022开发.Net Framework研发环境指南

IDE工具 Visual Studio 2022 Vs2022企业版 - VisualStudioSetup.exe Visual Studio Code VSCodeUserSetup-x64-1.66.2.exeVSCodeUserSetup-x64-1.67.0-insider.exe IDE环境 编程字体YaHei.Consolas YaHei.Consolas.1.12.ttf IDE插件 Visual Studio Code常用插件 Chinese…

STM32单片机使用STM32CubeMX和Simulink进行联合开发-1

STM32单片机使用STM32CubeMX和Simulink进行联合开发-1 使用Simulink中的STM32扩展功能包配合STM32CubeMX进行联合开发,包含环境配置和实际应用教程。 目录 STM32单片机使用STM32CubeMX和Simulink进行联合开发-1一、环境配置1.安装扩展功能包2.安装STM32-MAT包二、创建STM32Cu…

django项目基础后端功能使用

参考材料 Django新手项目实例-CSDN博客 一、django安装 pip3 install django 二、django项目新建 在目标目下执行 django-admin startproject testdjgo 执行完成后生成对应项目路径 三、django路由功能编写 /xxx/urls.py中编写路由信息&#xff0c;并且把路由转发到对应…

说出来你别不信,盲订问界M9的原因 你们想错了,他们只图这个

文|AUTO芯球 作者|李瑞 怎么还有人说华为是骗子&#xff1f; 华为一张海报说问界M9上市6天&#xff0c;大定超过3万台。有些人就说这是假的&#xff0c;反正没第三方数据&#xff0c;华为可以随便写。 我去&#xff0c;我作为一名大定问界M9的车主&#xff0c;就奉劝哪些黑子…

Linux篇之Centos中将系统时间设置为本地时间

要在 CentOS 上将系统时间设置为本地时间&#xff0c;可以按照以下步骤进行操作&#xff1a; 1.首先&#xff0c;你需要确定你想要设置的本地时间。例如&#xff0c;如果你想要将系统时间设置为当前时间&#xff08;假设是北京时间&#xff09;&#xff0c;则可以使用以下命令获…

5.vue学习笔记(数组变化的侦测+计算属性+Class绑定)

文章目录 1.数组变化的侦测1.1.变更方法1.2.替换一个数组 2.计算属性计算属性缓存vs方法 3.Class绑定3.1.绑定对象3.2.多个对象的绑定形式3.3.绑定数组3.4.数组与对象 1.数组变化的侦测 1.1.变更方法 vue能够侦听响应式数组的变更方法&#xff0c;并在它们被调用时出发相关的…

Taro+vue3 实现电影切换列表

1.需求 我们在做类似于猫眼电影的小程序或者H5 的时候 我们会做到那种 左右滑动的电影列表&#xff0c;这种列表一般带有电影场次 2.效果 3.说明 这种效果在淘票票 猫眼电影上 都有的 &#xff0c;一般电影类型的H5 或者小程序 这个是都有的 第一是好看 第二是客观性比较好 …

【Linux】【开发】Linux module名和C语言文件名相同导致的编译问题

&#x1f41a;作者简介&#xff1a;花神庙码农&#xff08;专注于Linux、WLAN、TCP/IP、Python等技术方向&#xff09;&#x1f433;博客主页&#xff1a;花神庙码农 &#xff0c;地址&#xff1a;https://blog.csdn.net/qxhgd&#x1f310;系列专栏&#xff1a;Linux技术&…

Mysql InnoDB行锁深入理解

Record Lock记录锁 Record Lock 称为记录锁&#xff0c;锁住的是一条记录。而且记录锁是有 S 锁和 X 锁之分的&#xff1a; 当一个事务对一条记录加了 S 型记录锁后&#xff0c;其他事务也可以继续对该记录加 S 型记录锁&#xff08;S 型与 S 锁兼容&#xff09;&#xff0c;…

物联网与智能家居:跨境电商与未来生活的融合

物联网&#xff08;Internet of Things&#xff0c;IoT&#xff09;和智能家居技术正迅速崛起&#xff0c;成为跨境电商领域的创新引擎。这两者的巧妙结合不仅为消费者提供更智能、便捷的生活方式&#xff0c;同时也为电商平台和制造商带来了全新的商机。本文将深入探讨物联网与…

Flink之Task重启策略

Task重启策略 1 策略API noRestart 无参数,task失败后不重启,整个job同时失败,默认策略. 代码示例 RestartStrategies.noRestart();fixedDelayRestart 参数注释restartAttempts最大重启次数delayBetweenAttempts重启时间间隔代码示例 // 最多重启5次,每次任务失败后间隔1s重启…

记录实现级联选择器多选功能时主要用到的函数

级联选择器多选功能时主要用到的函数 1、校验所给层级是否有效并且是否为完整路径 // 功能&#xff1a;涉及到级联选择器回显时&#xff0c;需校验是否为完整的路径&#xff0c;是则回显&#xff0c;不是则无无效路径 // options为级联数据&#xff0c;selectedPaths为要校验…