MySql数据库---判断函数,和窗口结合的函数,窗口函数

news2024/9/27 10:26:36

思维导图

判断函数

if(expr,v1,v2): 表达式结果为true返回v1,否则返回v2
ifnull(列名,dv): 列值为null返回dv,否则返回列值.
nullif(expr1,expr2): 表达式1=表达式2返回null,不等于返回表达式1的值.

窗口函数

作用: 可以为表新增一列,新增的列是什么取决于over()函数前面的函数.
主要函数是: over(parttion by 列名 order by 列名 [窗口范围])
结合函数:
        1.聚合函数:sum(),count(),avg(),max(),min()
        2.序号函数:rank(),row_number(),dense_rank()
        3.分布函数:percent_rank(),cume_dist()
        4.前后函数:lag(),lead()
        5.头尾函数:first_value(),last_value()
        6.其他函数:nth_value(),ntile()
窗口范围:
        rows between 起始行 and 结束行
        [
          rows between unbound preceding and unbound following #最大窗口
          rows between 1 preceding and 1 following             # 往上1行和往下一行.
          rows between 2 preceding and  current row            #往上2行到当前行
          rows between unbound preceding and current row       #往上无边界到当前.
          rows between current row  and unbound following      #当前行到往下无边界
        ]
        

序号函数

row_number():      按照 1,2,3,4 标记序号
rank():            按照 1,2,2,4 标记序号
dense_rank():      按照 1,2,2,3 标记序号
- 需求 分组后排序
select
    e.dname,
    e.ename,
    e.salary,
    row_number() over (partition by e.dname order by e.salary) as rn -- 1234[5,6,6,7]
from employee e ;
​
select
    e.dname,
    e.ename,
    e.salary,
    rank() over (partition by e.dname order by e.salary) as rn     -- 1224[5,6,6,7]
from employee e ;
​
select
    e.dname,
    e.ename,
    e.salary,
    dense_rank() over (partition by e.dname order by e.salary) as rn-- 1223[5,6,6,7]
from employee e ;

聚合函数结合

聚合函数:sum(),count(),avg(),max(),min()
窗口大小:
        1.如果只写over():                 此时窗口是第一行到最后一行(最大窗口)
        2.如果写了over(partition by 列) : 此时窗口大小是分组内的第一行到最后一行
        3.如果写了over(partition by 列 order by 列 ): 窗口大小是分组内当前行到往上无边界
        4.如果不满意上方的默认窗口,怎么办??? : 
        通过over(partition by dname order by hiredate rows between 1 preceding and 1 following)指定窗口.
select
 dname,
 ename,
 salary,
 sum(salary) over(partition by dname order by hiredate rows between 1 preceding and 1 following) as pv1,
 count(1) over(partition by dname order by hiredate rows between unbounded preceding and unbounded following) as pv2,
 avg(salary) over (partition by dname) as pv3
from employee;

前后函数

lag(显示的列,往前n条,找不到默认值)
lead(显示的列,往后n条,找不到默认值)
select
 dname,
 ename,
 hiredate,
 salary,
 lag(hiredate,1,'默认时间') over(partition by dname order by hiredate) as last_1_time,
 lag(hiredate,2) over(partition by dname order by hiredate) as last_2_time
from employee;
---------------------------------------------------------
select
 dname,
 ename,
 hiredate,
 salary,
 lead(hiredate,1,'默认时间') over(partition by dname order by hiredate) as last_1_time,
 lead(hiredate,2) over(partition by dname order by hiredate) as last_2_time
from employee;

首尾函数

-- todo 首尾函数----------first_value默认窗口是:分组内当前行到往上无边界-------------
-- todo 首尾函数----------last_value默认窗口是:分组内当前行到往上无边界-------------
-- 注意,  如果不指定ORDER BY,则进行排序混乱,会出现错误的结果
-- 需求1 : 截止到当前入职的人员.按照日期排序查询第1个入职和最后1个入职员工的薪资
select
  dname,
  ename,
  hiredate,
  salary,
  first_value(salary) over(partition by dname order by hiredate) as first,
  last_value(salary) over(partition by dname order by  hiredate) as last
from  employee;
​
-- 需求1 : 统计各部门全部数据.按照日期排序查询第1个入职和最后1个入职员工的薪资
select
  dname,
  ename,
  hiredate,
  salary,
  first_value(salary) over(partition by dname order by hiredate) as first,
  last_value(salary) over(partition by dname order by  hiredate rows between unbounded preceding and unbounded following) as last
from  employee;

其它函数

NTH_VALUE(expr,n): 用途:返回窗口中第n个expr的值。expr可以是表达式,也可以是列名
NTILE(n):用途:将分区中的有序数据分为n个等级,记录等级数
-- todo  nth_value(列,第几条数据)
-- 查询每个部门截止目前薪资排在第二和第三的员工信息
select
  dname,
  ename,
  hiredate,
  salary,
  nth_value(salary,2) over(partition by dname order by hiredate) as second_score,
  nth_value(salary,3) over(partition by dname order by hiredate) as third_score
from employee;
​
-- todo ntile()根据入职日期将每个部门的员工分成3组
select
  dname,
  ename,
  hiredate,
  salary,
ntile(3) over(partition by dname order by  hiredate  ) as rn
from employee;

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

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

相关文章

Spring Boot入门到精通:网上购物商城系统

第3章 系统分析 3.1 可行性分析 在系统开发之初要进行系统可行分析,这样做的目的就是使用最小成本解决最大问题,一旦程序开发满足用户需要,带来的好处也是很多的。下面我们将从技术上、操作上、经济上等方面来考虑这个系统到底值不值得开发。…

Cisco Secure Firewall Management Center Virtual 7.6.0 发布下载,新增功能概览

Cisco Secure Firewall Management Center Virtual 7.6.0 - 思科 Firepower 管理中心软件 Firepower Management Center Software for ESXi & KVM 请访问原文链接:https://sysin.org/blog/cisco-fmc-7/,查看最新版。原创作品,转载请保留…

WPS中让两列数据合并的方法

有这样一个需求,就是把A列数据和B列数据进行合并(空单元格略过)具体实现效果如图下: 该如何操作呢? 首先在新的一列第一个单元格中输入公式"A1&B1" 然后回车,就出现了两列单元格数据合并的效…

人员个体检测、PID行人检测、行人检测算法样本

人员个体检测算法主要用于视频监控、安全防范、人流统计、行为分析等领域,通过图像识别技术来检测和识别视频或图像中的人员个体。这种技术可以帮助管理者实时监控人员活动,确保安全和秩序,提高管理效率。 一、技术实现 人员个体检测算法通常…

光耦——连接半导体创新的桥梁

半导体技术作为现代科技的重要支柱之一,在电子、通信、能源等领域都有着广泛的应用。而在半导体领域,光耦作为一种重要的光电器件,正以其独特的优势和广泛的应用领域,为半导体创新注入新的活力,成为连接半导体创新的桥…

IMX6UL开发板中断实验(三)

在上一节我们编写完成了中断驱动文件和中断驱动头文件,那么这一讲我们将继续中断实验 下面就是GPIO的中断设置,第一步要设置中断GPIO的触发方式,首先我们先看到寄存器,一共有GPIOx_ICR1和ICR2, 图如上,ICR1…

TortoiseGit 下载和安装

下载 1,下载路径 Download – TortoiseGit – Windows Shell Interface to Git 2,选择windows64的, 3,下载完成后 安装 1,双击运行,点击next 2,点击next 3,点击next 4&#xff0…

unity_Occlusion_Culling遮挡剔除学习

unity_Occlusion_Culling遮挡剔除学习 文档: https://docs.unity.cn/cn/2019.4/Manual/occlusion-culling-getting-started.html没彻底搞明白,但是会用,虽然也不熟练 设置遮挡剔除 打开遮挡剔除面板 设置场景物体。设置为静态 设置场景 烘…

ZYNQ:开发环境搭建

资料下载 http://47.111.11.73/docs/boards/fpga/zdyz_qimxing(V2).html Vivado软件是什么? Vivado软件是Xilinx(赛灵思)公司推出的一款集成设计环境(IDE),主要用于FPGA(现场可编程门阵列&am…

【Spring】Spring Aop基础入门

一、AOP(Aspect-Oriented Programming: 面向切面编程) 将那些与业务无关,却为业务模块所共同调用的逻辑(例如事务处理、日志管理、权限控制等)封装抽取成一个可重用的模块,这个模块被命名为“切面”(Aspect&#xff09…

【Linux系统编程】第二十四弹---从零到一:掌握进程替换的奥秘

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、进程程序替换 1.1、替换原理 1.2、替换函数 1.3、函数解释 1.4、命名理解 1.5、代码演示 1.5.1、execl调用举例 1.5…

线上环境排故思路与方法GC优化策略

前言 这是针对于我之前[博客]的一次整理,因为公司需要一些技术文档的定期整理与分享,我就整理了一下。(https://blog.csdn.net/TT_4419/article/details/141997617?spm1001.2014.3001.5501) 其实,nginx配置 服务故障转移与自动恢复也是可以…

九、子查询

文章目录 0. 引入1. 需求分析与问题解决1.1 实际问题1.2 子查询的基本使用1.3 子查询的分类1.3.1 分类方式11.3.2 分类方式2 2. 单行子查询2.1 单行比较操作符2.2 代码实例2.3 HAVING 中的子查询2.4 CASE中的子查询2.5 子查询中的空值问题2.6 非法使用子查询 3. 多行子查询3.1 …

FPGA实现PCIE图片采集转HDMI输出,基于XDMA中断架构,提供3套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的PCIE方案 3、PCIE基础知识扫描4、工程详细设计方案工程设计原理框图测试图片QT上位机XDMA配置及使用XDMA中断模块FDMA图像缓存Native视频时序生成RGB转HDMI输出模块Windows版本XDMA驱动安装Linux版本XDMA驱动安装工程源码…

awvs工具测试输出漏洞报告教程

1.登录进awvs 2.添加要扫描的网站url 3.这里选择生成新的报告 4.开始扫描 5.生成报告

Spring Boot 核心概念

1. 起步依赖 Spring Boot 提供了一系列以 spring-boot-starter- 为前缀的起步依赖,通过这些依赖,可以快速引入 Web、JPA、Security、Redis 等功能。例如: spring-boot-starter-web:包含 Web 开发常见的依赖,如 Sprin…

TypeScript 设计模式之【备忘录模式】

文章目录 备忘录模式:时光机器的魔法备忘录模式的奥秘备忘录模式有什么利与弊?如何使用备忘录模式来优化你的系统代码实现案例备忘录模式的主要优点备忘录模式的主要缺点备忘录模式的适用场景总结 备忘录模式:时光机器的魔法 想象一下,如果…

调用飞书接口导入供应商bug

1、业务背景 财务这边大部分系统都是供应商项目,由于供应商的研发人员没有飞书项目的权限,涉及到供应商系统需求 财务这边都是通过多维表格进行bug的生命周期管理如图: 但多维表格没有跟飞书项目直接关联,测试组做bug统计的时候无…

【Docker】01-Docker常见指令

1. Docker Docker会下载镜像,运行的时候,创建一个隔离的环境,称为容器。 docker run -d \ # 创建并运行一个容器,-d表示后台运行 --name mysql \ # 容器名称-p 3307:3306 \ # 端口映射,宿主机端口映射到容器端口-e TZ…

打造同城O2O平台:外卖跑腿APP的架构与功能设计详解

今天,小编将于大家共同讨论外卖跑腿APP的架构设计及其核心功能,旨在为开发者提供一份详尽的参考。 一、外卖跑腿APP的架构设计 1.整体架构概述 通常包括前端、后端和数据库。 2.前端设计 用户端提供直观的界面,方便用户下单、查询订单状态…