第6步---MySQL的控制流语句和窗口函数
第6步---MySQL的控制流语句和窗口函数
1.IF关键字
-- ==================控制流语句=================
SELECT IF('5>3','大于','小于');-- 会单独生成一列的
SELECT *,IF(score >90 , '优秀', '一般') '等级' FROM stu_score;-- IFNULL(expr1,expr2)
SELECT id,name ,IFNULL(salary,0),dept_id FROM emp4;-- ISNULL() 判断某个值是不是null
-- 0 表示不是null
SELECT ISNULL(11);
SELECT ISNULL(NULL);-- NULLIF(expr1,expr2)-- 一样的返回null
SELECT NULLIF(12,12);-- 不一样返回第一个的值
SELECT NULLIF(12,1)
2.CASE关键字
语法格式:
会依次判断下面的值要是相等的话就会进行输出的
SELECT
CASE5 WHEN 5 THEN '你好5' WHEN 4 THEN '你好4' ELSE 'hi'
END ;

-- 设置显示的别名
SELECT
CASE5 WHEN 5 THEN '你好5' WHEN 4 THEN '你好4' ELSE 'hi'
END as info;

-- 创建一个新的数据库orders
CREATE TABLE `orders` (`id` int(11) NOT NULL AUTO_INCREMENT,`price` double DEFAULT NULL,`pay_type` int(11) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;插入下面的语句
INSERT INTO `sys_test`.`orders` (`id`, `price`, `pay_type`) VALUES (1, 1200, 1);
INSERT INTO `sys_test`.`orders` (`id`, `price`, `pay_type`) VALUES (2, 1000, 2);
INSERT INTO `sys_test`.`orders` (`id`, `price`, `pay_type`) VALUES (3, 200, 3);
INSERT INTO `sys_test`.`orders` (`id`, `price`, `pay_type`) VALUES (4, 3000, 1);
INSERT INTO `sys_test`.`orders` (`id`, `price`, `pay_type`) VALUES (5, 1500, 2);
后面的支付方式采用的都是不同的编号进行设置的支付的方式
1:微信支付2:支付宝支付3:银行卡支付4:其他
-- 查看订单的支付的方式
SELECT id,price, pay_type,
CASE pay_typeWHEN 1 THEN '支付宝'WHEN 2 THEN '微信'WHEN 3 THEN '银联'ELSE'未知支付方式'
END as '支付方式'FROM orders;

3.窗口函数

比原先的聚合函数更加强大不仅可以看见原始的数据还可以看见转换之后的数据。
具有开窗聚合函数的作用。
window FUNCTION (expr ) over(PRIMARY KEY
ORDER BY
...
)
-- 序号函数
SELECT * FROM emp4;-- 对每个部门员工按照薪资进行排序
SELECT id,name ,salary,dept_id ,ROW_NUMBER() over(PARTITION by dept_id ORDER BY salary DESC ) AS rn1,
RANK() over(PARTITION by dept_id ORDER BY salary DESC ) AS rn2,
DENSE_RANK() over(PARTITION by dept_id ORDER BY salary DESC ) AS rn3
FROM emp4;

都能实现相同的效果,区别在于后面的参数的值设置的时候是不是相同的值。
-- 分组求topN
SELECT * FROM (
SELECT id,name ,salary,dept_id ,
DENSE_RANK() over(PARTITION by dept_id ORDER BY salary DESC ) AS rn3
FROM emp4) t
WHERE t.rn3<=3 ;

4.分布函数
cume_dist和percent_rank
用途:分组内小于 等于当前rank值得行数/分组内得总行数。
场景:查询小于当前薪资得比例
-- 薪资比例
SELECT dept_id,name ,salary,time ,
CUME_DIST() over(PARTITION by dept_id ORDER BY time) AS rn3
FROM emp4;

计算的是小于自己得薪资得人数得比例的关系。
PERCENT_RANK函数
这个函数的用处不是很大
SELECT dept_id,name ,salary,time ,
rank() over(PARTITION by dept_id ORDER BY time) AS rn2,
PERCENT_RANK() over(PARTITION by dept_id ORDER BY time) AS rn3
FROM emp4;

5.前后函数
-- 前后函数
SELECT dept_id,name ,salary,time ,
LAG(time ,1,'2023-08-18') over(PARTITION by dept_id ORDER BY time) AS rn2,
LAG(time ,2) over(PARTITION by dept_id ORDER BY time) AS rn3
FROM emp4;-- 前后函数
SELECT dept_id,name ,salary,time ,
lead(time ,1,'2023-08-18') over(PARTITION by dept_id ORDER BY time) AS rn2,
lead(time ,2) over(PARTITION by dept_id ORDER BY time) AS rn3
FROM emp4;
6.头尾函数
-- 到目前为止 按照日期进行排序找到第一个入职的和最后一个入职的员工的薪资
-- 到目前为止 按照日期进行排序找到第一个入职的和最后一个入职的员工的薪资
SELECT dept_id,name ,salary,time ,
FIRST_VALUE(salary)over(PARTITION by dept_id ORDER BY time) AS rn2,
LAST_VALUE(salary) over(PARTITION by dept_id ORDER BY time) AS rn3
FROM emp4;

7.开窗聚合函数
-- 按照入职时间排序并求工资的和
SELECT dept_id,name ,salary,time ,
sum(salary) over(PARTITION by dept_id ORDER BY time ) AS rn3
FROM emp4;

-- 按照入职时间排序并求工资的和
-- 从开始加到当前行 rows BETWEEN unbounded preceding and current row
SELECT dept_id,name ,salary,time ,
sum(salary) over(PARTITION by dept_id ORDER BY time rows BETWEEN unbounded preceding and current row ) AS rn3
FROM emp4;-- 往上3行加到当前行
SELECT dept_id,name ,salary,time ,
sum(salary) over(PARTITION by dept_id ORDER BY time rows BETWEEN 3 preceding and current row ) AS rn3
FROM emp4;-- 往上3行往后加一行
SELECT dept_id,name ,salary,time ,
sum(salary) over(PARTITION by dept_id ORDER BY time rows BETWEEN 3 preceding and 1 following ) AS rn3
FROM emp4;
上面的开窗聚合函数可以实现复杂的聚合的操作。
8.NTH_VALUE窗口函数
-- 截至到当前排名是多少的
SELECT dept_id,name ,salary,time ,
NTH_VALUE(salary,2) over(PARTITION by dept_id ORDER BY time) AS rn2,
NTH_VALUE(salary,1)over(PARTITION by dept_id ORDER BY time) AS rn3
FROM emp4;-- 按照入职时间分成3组
SELECT dept_id,name ,salary,time ,
ntile(3)over(PARTITION by dept_id ORDER BY time) AS rn3
FROM emp4;-- 按照入职时间分成3组 取出第一组员工
SELECT * FROM(
SELECT dept_id,name ,salary,time ,
ntile(3)over(PARTITION by dept_id ORDER BY time) AS rn3
FROM emp4
) t WHERE t.rn3=1;
相关文章:
第6步---MySQL的控制流语句和窗口函数
第6步---MySQL的控制流语句和窗口函数 1.IF关键字 -- 控制流语句 SELECT IF(5>3,大于,小于);-- 会单独生成一列的 SELECT *,IF(score >90 , 优秀, 一般) 等级 FROM stu_score;-- IFNULL(expr1,expr2) SELECT id,name ,IFNULL(salary,0),dept_id FROM emp4;-- ISNULL() …...
Android通过OpenCV实现相机标定
在 Android 中使用 OpenCV 实现相机标定,你可以按照以下步骤进行操作: 首先,确保你已经在项目中引入了 OpenCV 库的依赖。 创建一个 CameraCalibrator 类,用于执行相机标定。 import org.opencv.calib3d.Calib3dimport org.open…...
我们可能要为ChatGPT的谢幕做好准备
ChatGPT的未来:悬念仍存 人工智能已经成为我们生活不可或缺的一部分。在众多AI应用中,OpenAI研发的ChatGPT凭借其极强的语言理解和生成能力脱颖而出,是一项划时代的变革性创新,帮助了无数企业和个人,改变了我们与技…...
深入浅出Pytorch函数——torch.nn.init.xavier_normal_
分类目录:《深入浅出Pytorch函数》总目录 相关文章: 深入浅出Pytorch函数——torch.nn.init.calculate_gain 深入浅出Pytorch函数——torch.nn.init.uniform_ 深入浅出Pytorch函数——torch.nn.init.normal_ 深入浅出Pytorch函数——torch.nn.init.c…...
Abandon_Ubuntu Declaration
鉴于以下几个原因,持续到明年考研结束,我将不再捣鼓ubuntu和任何linux系统, 原因如下: ubuntu23.04不支持wps编辑pdf这个核心功能,且开机向canonial公司发送远程遥测,暂时不会用iptables禁用,故…...
Java设计模式-抽象工厂模式
简介 设计模式是软件设计中的一种常见方法,通过定义一系列通用的解决方案,来解决常见的软件设计问题。其中,抽象工厂模式是一种非常常见的设计模式,它可以帮助我们创建一组相关的对象,而不需要指定具体的实现方式。 …...
Rust语法:所有权引用生命周期
文章目录 所有权垃圾回收管理内存手动管理内存Rust的所有权所有权转移函数所有权传递 引用与借用可变与不可变引用 生命周期悬垂引用函数生命周期声明结构体的生命周期声明Rust生命周期的自行推断生命周期约束静态生命周期 所有权 垃圾回收管理内存 Python,Java这…...
办手机卡/流量卡需要问清楚啥?
网上的手机卡一搜能出现千千万,那么怎么才能避免购买到那些套路卡呢?今天就给大家分享一下,办理手机卡时需要问清楚什么? 办理流量卡需要咨询的五大问题,下面开始进入正题。 1、是否是正规号卡?正规的号…...
vim基本使用方法
VIM 1.vim介绍2.vim基本操作2.1 模式切换2.2 命令模式2.3 底行模式 1.vim介绍 vim是linux上一个有多个编辑模式的编辑器。 这里主要介绍三种模式: 命令模式(Normal mode) 执行命令的模式,主要任务就是控制光标移动、复制和删除。…...
漏洞指北-VulFocus靶场专栏-入门
漏洞指北-VulFocus靶场01-入门 VulFocus靶场前置条件:入门001 命令执行漏洞step1: 输入默认index的提示step2: 入门002 目录浏览漏洞step1:进入默认页面,找到tmp目录step2 进入tmp目录获取flag文件 VulFocus靶场前置条…...
管理类联考——逻辑——真题篇——按知识分类——汇总篇——二、论证逻辑——推论——第二节——数字推理题
文章目录 第二节 数字推理题真题(2017-31)——推论——数字推理题——数量比例模型真题(2014-33)——推论——数字推理题——数量比例模型——(1)若题干既有数量,也有比例,答案一般为数量。(2)若题干只有比例没有数量,答案一般为比例。真题(2018-44)——推论——数…...
git基础教程(24) git reflog查看引用日志
文章目录 1、`git reflog`命令说明2、`git reflog`命令显示内容3、具体的用法4、引起ref变化的操作有git reflog 命令是用来恢复本地错误操作很重要的一个命令,所以在这里对它进行一下整理。 1、git reflog命令说明 reflog翻译:Reference logs(参考日志) git reflog命令:…...
成都爱尔谭娇主任提醒孩子不停揉眼睛是因为什么
孩子总是揉眼睛, 明显眼睛不舒服, 但看着好像没什么? 可孩子不停眨眼流泪, 肯定不对…… 孩子到底怎么了? 孩子可能长了“倒睫”! 孩子出现倒睫毛就是睫毛不朝外长而向内长,是婴幼儿很容易患的一种眼病。 由于孩子的脸颊及鼻梁发…...
医疗设备管理软件哪家好?医院设备全生命周期管理要怎么做?
随着医学技术的不断进步,医疗设备变得越来越先进,越来越复杂。因此,医疗设备的管理也变得越来越重要。传统的医疗设备管理方式存在很多问题,比如设备数据难统计、报修方式难统一、巡检维保难规范等。为了解决这些问题,…...
基于PaddlePaddle实现的声纹识别系统
前言 本项目使用了EcapaTdnn、ResNetSE、ERes2Net、CAM等多种先进的声纹识别模型,不排除以后会支持更多模型,同时本项目也支持了MelSpectrogram、Spectrogram、MFCC、Fbank等多种数据预处理方法,使用了ArcFace Loss,ArcFace loss…...
使用GDB工具分析core文件的方法
引言: 在软件开发过程中,我们经常会遇到程序崩溃或异常退出的情况。这时,一个非常有用的工具就是GDB(GNU调试器),它可以帮助我们分析core文件并找出导致程序崩溃的原因。本文将介绍如何使用GDB工具来分析c…...
Maven - 统一构建规范:Maven 插件管理最佳实践
文章目录 Available Plugins开源项目中的使用插件介绍maven-jar-pluginmaven-assembly-pluginmaven-shade-pluginShade 插件 - 标签artifactSetrelocationsfilters 完整配置 Available Plugins https://maven.apache.org/plugins/index.html Maven 是一个开源的软件构建工具&…...
对接海康明眸门禁设备-删除人员信息
对接海康明眸门禁设备-删除人员信息 文中登录 退出登录 长连接和海康hCNetSDK等接口 见文章 初始SDK和登录 /*** 删除人脸 IotCommDataResult 自定义类 收集结果*/Overridepublic List<IotCommDataResult> deleteFace(IotCameraParam camera, Collection<Long> us…...
LEADTOOLS Imaging SDK Crack
LEADTOOLS Imaging SDK Crack 高级开发人员工具包包括ActiveX和WPF/XAML控件。 LEADTOOLS Imaging SDK为文件格式导入/导出、图像压缩、图像显示和效果、颜色转换、图像处理、TWAIN扫描、图像通用对话框、数据库集成、打印和互联网提供了基本和高级的彩色图像功能。 LEADTOOLS …...
2023并发之八股文——面试题
基础知识 并发编程的优缺点为什么要使用并发编程(并发编程的优点) 充分利用多核CPU的计算能力:通过并发编程的形式可以将多核CPU 的计算能力发挥到极致,性能得到提升方便进行业务拆分,提升系统并发能力和性能&#x…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...
Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
实战三:开发网页端界面完成黑白视频转为彩色视频
一、需求描述 设计一个简单的视频上色应用,用户可以通过网页界面上传黑白视频,系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观,不需要了解技术细节。 效果图 二、实现思路 总体思路: 用户通过Gradio界面上…...
