SQL练习(12/81)
目录
1.找类别最高值
使用子查询
使用窗口函数(MySQL8.X支持)
扩展:查找类别前N高的值
2.删除重复值并保留最小序号
delete实现
筛选无重复且序号最小值
select——where in
select——join&子查询
3.找带条件的连续值
窗口函数实现
日期比较函数
1.找类别最高值
184. 部门工资最高的员工 - 力扣(LeetCode)
错误的查询方式:
(看看都会写写全错版T^T)
SELECT department.name AS Department, employee.name AS Employee, employee.salary AS Salary
FROM employee
JOIN department ON employee.departmentId = department.id
GROUP BY department.id
HAVING MAX(salary);
问题分析
-
在GROUP BY
和SELECT
列不一致:SELECT
中选择了department.name
、employee.name
和employee.salary
,但在GROUP BY
中只按department.id
分组。这会导致语法错误,因为GROUP BY
后的列必须与SELECT
中的非聚合列一致。 -
HAVING
子句的使用:HAVING MAX(salary)
是不合法的,因为HAVING
子句需要一个条件来过滤分组结果。没有提供一个具体的条件,只是写了MAX(salary)
。 -
逻辑问题:
目标是筛选每个部门的最高工资员工,但当前的查询逻辑无法实现这一点。需要先找到每个部门的最高工资,然后再关联员工表来获取对应的员工信息。
正确的查询方式:
使用子查询
select department.name as Department,employee.name as Employee,employee.salary as Salary
from employee
join department on employee.departmentId = department.id
where (employee.salary,employee.departmentId) in(select max(salary),departmentIdfrom employeegroup by departmentId
)
子查询
SELECT departmentId, MAX(salary) FROM Employee GROUP BY departmentId
找到每个部门的最高工资。外层查询通过
WHERE (departmentId, salary) IN (...)
筛选出这些最高工资对应的员工。
使用窗口函数(MySQL8.X支持)
SELECT Department, Employee, Salary
FROM (SELECT d.name AS Department, e.name AS Employee, e.salary AS Salary,RANK() OVER (PARTITION BY d.id ORDER BY e.salary DESC) AS rankFROM Employee eJOIN Department d ON e.departmentId = d.id
) AS ranked_employees
WHERE rank = 1;
使用窗口函数
RANK()
,对每个部门的员工按工资降序排名。
PARTITION BY employee.departmentId
:按departmentId
分组
ORDER BY employee.salary DESC
:按工资降序排列,工资最高的员工排名为1。
外层查询筛选出排名为1的员工,即每个部门的最高工资员工。
扩展:查找类别前N高的值
185. 部门工资前三高的所有员工 - 力扣(LeetCode)
使用方法2窗口函数进行推广
/* Write your T-SQL query statement below */
SELECT Department, Employee, Salary
FROM (SELECT d.name AS Department, e.name AS Employee, e.salary AS Salary,dense_RANK() OVER (PARTITION BY d.id ORDER BY e.salary DESC) AS rankFROM Employee eJOIN Department d ON e.departmentId = d.id
) AS ranked_employees
WHERE rank <= 3;
2.删除重复值并保留最小序号
196. 删除重复的电子邮箱 - 力扣(LeetCode)
delete实现
-- 用自连接:
delete p1
from person p1
join person p2 on p1.email=p2.email and p1.id>p2.id-- 不用自连接
DELETE p1 FROM Person p1,Person p2
WHEREp1.Email = p2.Email AND p1.Id > p2.Id
筛选无重复且序号最小值
select——where in
SELECT id, email
FROM person
WHERE (email, id) IN (SELECT email, MIN(id)FROM personGROUP BY email
);
子查询:
SELECT email, MIN(id) FROM Person GROUP BY email
找到每个id
。这个子查询的结果是一个临时表,包含每个id
。主查询:通过
WHERE (email, id) IN (...)
筛选出Person
表中那些id
匹配子查询结果的记录。
select——join&子查询
SELECT p1.id, p1.email
FROM person p1
JOIN (SELECT email, MIN(id) AS min_idFROM personGROUP BY email
) p2 ON p1.email = p2.email AND p1.id = p2.min_id;
子查询:
SELECT email, MIN(id) AS min_id FROM person GROUP BY email
找到每个id
。这个子查询的结果是一个临时表p2
,包含每个id
。主查询:通过
JOIN
将person
表和子查询的结果p2
连接起来,条件是p1.email = p2.email AND p1.id = p2.min_id
,这样可以筛选出每个id
对应的记录。
(select力扣上运行不了但我觉得逻辑上是这样)
3.找带条件的连续值
197. 上升的温度 - 力扣(LeetCode)
窗口函数实现
# Write your MySQL query statement below
select id as Id from (select id,temperature,recordDate,LAG(temperature,1) over (order by recordDate) as pre_temperature,LAG(recordDate,1) over (order by recordDate) as pre_recordDatefrom weather
) as queryweather
where pre_temperature<temperature and DATEDIFF(recordDate,pre_recordDate)=1
子查询:
LAG(temperature, 1) OVER (ORDER BY recordDate) AS pre_temperature
:获取前一天的温度。LAG(recordDate, 1) OVER (ORDER BY recordDate) AS pre_recordDate
:获取前一天的日期。主查询:
WHERE pre_temperature < temperature
:确保当前温度高于前一天的温度。AND DATEDIFF(recordDate, pre_recordDate) = 1
:确保当前日期和前一天的日期是连续的。
日期比较函数
-
DATEDIFF()
:计算两个日期之间的天数差SELECT DATEDIFF('2025-05-18', '2025-05-10') AS days_difference;
-
DATE_ADD()
和DATE_SUB()
:在日期上加上或减去指定的时间间隔SELECT DATE_ADD('2025-05-18', INTERVAL 10 DAY) AS future_date; SELECT DATE_SUB('2025-05-18', INTERVAL 10 DAY) AS past_date;
后面两题都用到了之前遇到过的知识点,就不过多赘述啦
(其实是靠自己写出来了 嘿嘿,虽然他们都是简单的题)
4.
586. 订单最多的客户 - 力扣(LeetCode)
select customer_number
from (select customer_number,count(*) as cn from ordersgroup by customer_numberorder by cn DESC
) as subquery
limit 1
5.
511. 游戏玩法分析 I - 力扣(LeetCode)
select player_id,event_date as first_login
from activity
where (player_id,event_date) in(select player_id,min(event_date)from activitygroup by player_id
)
相关文章:
SQL练习(12/81)
目录 1.找类别最高值 使用子查询 使用窗口函数(MySQL8.X支持) 扩展:查找类别前N高的值 2.删除重复值并保留最小序号 delete实现 筛选无重复且序号最小值 select——where in select——join&子查询 3.找带条件的连续值 窗口函数…...

组态王|如何创建组态王工程?
哈喽,你好啊,我是雷工! 组态王是比较普及的组态软件之一,大部分工控人应该都接触过组态王软件, 最近有个用组态王软件开发上位机,对设备进行集中控制的项目,边开发,顺便记录一些使用方法。 本篇从基础的如何创建组态王工程开始记录,以下为操作笔记。 1 、首先在工程…...

mysql数据库-3(备份和恢复)
1. 冷备份和还原的实现 简介:冷备份定义是 读、写操作均不可进行,数据库停止服务 (超级简单) 冷备份 需求 对 10.0.0.13 主机实现冷备操作 关闭 10.0.0.13 主机的服务(ubuntu系统为例) 10.0.0.12为远程主机 systemctl stop mysql.service 备份数据 mkdir /data/…...

估分啦~全国青少年信息素养大赛部分赛项已考完~图形化/算法创意实践
2025年全国青少年信息素养大赛-图形化编程挑战赛-小低组真题试卷 全国青少年信息素养大赛,图形化编程和算法创意实践挑战赛已考完,各位可以去题库重新做做下,复盘下,为更好的自己努力~ 配有答案和解析哦~ 2025年全国青少年信息素…...

【Linux服务器】-虚拟机安装(CentOS7.9)
【Linux服务器】-虚拟机安装(CentOS7.9) 需提前准备好环境安装1. 创建新的虚拟机2. 选择默认配置,下一步3. 选择稍后指定操作系统,下一步4. 选择linux操作系统,并选择CentOS 7 64位 ,下一步5. 分配磁盘空间…...
鸿蒙OSUniApp 制作简洁高效的标签云组件#三方框架 #Uniapp
UniApp 制作简洁高效的标签云组件 在移动端应用中,标签云(Tag Cloud)是一种常见的UI组件,它以视觉化的方式展示关键词或分类,帮助用户快速浏览和选择感兴趣的内容。本文将详细讲解如何在UniApp框架中实现一个简洁高效的…...

2025年渗透测试面试题总结-百度面经(题目+回答)
网络安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 百度面经 百度安全工程师面试深度复盘与优化指南 一、项目经验反思与优化策略 二、技术问题深度解析 …...
java集合相关的api-总结
简介 集合是存储数据的容器,集合相关的API提供了不同的数据结构,来满足不同的需求。这里是对常见集合API的使用场景和相关源码的一个总结,在实际开发中,如果不知道该选择什么集合,这篇文章也许可以参考一下。 集合相…...
深入解析JVM字节码解释器执行流程(OpenJDK 17源码实现)
一、核心流程概述 JVM解释器的核心任务是将Java字节码逐条翻译为本地机器指令并执行。其执行流程可分为以下关键阶段: 方法调用入口构建:生成栈帧、处理参数、同步锁等。 字节码分派(Dispatch):根据字节码跳转到对应…...

分别用 语言模型雏形N-Gram 和 文本表示BoW词袋 来实现文本情绪分类
语言模型的雏形 N-Gram 和简单文本表示 Bag-of-Words 语言表示模型简介 (1) Bag-of-Words (BoW) 是什么? *定义:将文本表示为词频向量,忽略词序和语法,仅记录每个词的出现次数。 **示例: 句子1:I love …...

C#.NET 或 VB.NET Windows 窗体中的 DataGridView – 技巧、窍门和常见问题
DataGridView 控件是一个 Windows 窗体控件,它允许您自定义和编辑表格数据。它提供了许多属性、方法和事件来自定义其外观和行为。在本文中,我们将讨论一些常见问题及其解决方案。这些问题来自各种来源,包括一些新闻组、MSDN 网站以及一些由我…...

PyTorch音频处理技术及应用研究:从特征提取到相似度分析
文章目录 音频处理技术及应用音频处理技术音视频摘要技术音频识别及应用 梅尔频率倒谱系数音频特征尔频率倒谱系数简介及参数提取过程音频处理快速傅里叶变换(FFT)能量谱处理离散余弦转换 练习案例:音频建模加载音频数据源波形变换的类型绘制波形频谱图波形Mu-Law 编…...
SHAP分析图的含义
1. 训练集预测结果对比图 表征含义: 展示模型在训练集上的预测值(红色曲线)与真实值(灰色曲线)的对比。通过曲线重合度可直观判断模型的拟合效果。标题中显示的RMSE(均方根误差)量化了预测值与…...

VSTO(C#)Excel开发进阶2:操作图片 改变大小 滚动到可视区
初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C++的,可以在任何平台上使用。 源码指引:github源码指引_初级代码游戏的博客-CSDN博客 入…...

多用途商务,电子产品发布,科技架构,智能手表交互等发布PPT模版20套一组分享
产品发布类PPT模版20套一组:产品发布PPT模版https://pan.quark.cn/s/25c8517b0be3 第一套PPT模版是一个总结用的PPT封面,背景浅灰色,有绿色叶片和花朵装饰,深绿色标题,多个适用场景和占位符。突出其清新自然的设计和商…...
Java正则表达式:从基础到高级应用全解析
Java正则表达式应用与知识点详解 一、正则表达式基础概念 正则表达式(Regular Expression)是通过特定语法规则描述字符串模式的工具,常用于: 数据格式验证文本搜索与替换字符串分割模式匹配提取 Java通过java.util.regex包提供支持,核心类…...

WindowsPE文件格式入门11.资源表
https://www.bpsend.net/thread-411-1-1.html 资源表 资源的管理方式采用windows资源管理器目录的管理方式,一般有三层目录。根目录 结构体IMAGE_RESOURCE_DIRECTORY:描述名称资源和ID资源各自的数量,不描述文件。资源本质都是二进制数据&…...

C语言标准I/O与Linux系统调用的文件操作
01. 标准库函数与系统调用对比 系统调用标准I/O库open/read/write/closefopen/fread/fwrite/fclose文件描述符(fd)文件指针(FILE*)无缓冲,直接系统调用自动缓冲管理每次操作触发系统调用减少系统调用次数<fcntl.h> <unistd.h><stdio.h> 系统调用…...

【MYSQL】笔记
📚 博主的专栏 🐧 Linux | 🖥️ C | 📊 数据结构 | 💡C 算法 | 🅒 C 语言 | 🌐 计算机网络 在ubuntu中,改配置文件: sudo nano /etc/mysql/mysql.conf.d/mysq…...

线程池核心线程永续机制:从源码到实战的深度解析
简介 源管理的基石,其核心线程为何不会超时销毁一直是开发者关注的焦点。核心线程的永续机制不仅确保了系统的稳定响应,还避免了频繁创建和销毁线程带来的性能损耗。本文将从源码层面深入剖析线程池核心线程的存活原理,同时结合企业级实战案例,展示如何正确配置和管理线程…...

DS新论文解读(2)
上一章忘了说论文名字了,是上图这个名字 我们继续,上一章阅读地址: dsv3新论文解读(1) 这论文剩下部分值得说的我觉得主要就是他们Infra通信的设计 先看一个图 这个是一个标准的h800 8卡with 8cx7 nic的图…...

html文件cdn一键下载并替换
业务场景: AI生成的html文件,通常会使用多个cdn资源、手动替换or下载太过麻烦、如下py程序为此而生,指定html目录自动下载并替换~ import os import requests from bs4 import BeautifulSoup from urllib.parse import urlparse import has…...
react路由中Suspense的介绍
好的,我们来详细解释一下这个 AppRouter 组件的代码。 这个组件是一个在现代 React 应用中非常常见的模式,特别是在使用 React Router v6 进行路由管理和结合代码分割(Code Splitting)来优化性能时。 JavaScript const AppRout…...

【ROS2】 核心概念6——通信接口语法(Interfaces)
古月21讲/2.6_通信接口 官方文档:Interfaces — ROS 2 Documentation: Humble documentation 官方接口代码实战:https://docs.ros.org/en/humble/Tutorials/Beginner-Client-Libraries/Single-Package-Define-And-Use-Interface.html ROS 2使用简化的描…...

matlab官方免费下载安装超详细教程2025最新matlab安装教程(MATLAB R2024b)
文章目录 准备工作MATLAB R2024b 安装包获取详细安装步骤1. 文件准备2. 启动安装程序3. 配置安装选项4. 选择许可证文件5. 设置安装位置6. 选择组件7. 开始安装8. 完成辅助设置 常见问题解决启动失败问题 结语 准备工作 本教程将帮助你快速掌握MATLAB R2024b的安装技巧&#x…...

【运营商查询】批量手机号码归属地和手机运营商高速查询分类,按省份城市,按运营商移动联通电信快速分类导出Excel表格,基于WPF的实现方案
WPF手机号码归属地批量查询与分类导出方案 应用场景 市场营销:企业根据手机号码归属地进行精准营销,按城市或省份分类制定针对性推广策略客户管理:快速对客户手机号码进行归属地分类,便于后续客户关系管理数…...

ctf 基础
一、软件安装和基本的网站: 网安招聘网站 xss跨站脚本攻击 逆向:可以理解为游戏里的外挂 pwn最难的题目 密码学: 1、编码:base64 2、加密:凯撒 3、摘要:MD5、SHA1、SHA2 调查取证:杂项&am…...
掌握HTML文件上传:从基础到高级技巧
HTML中input标签的上传文件功能详解 一、基础概念 1. 文件上传的基本原理 在Web开发中,文件上传是指将本地计算机中的文件(如图片、文档、视频等)传输到服务器的过程。HTML中的<input type"file">标签是实现这一功能的基础…...
UE5无法编译问题解决
1. vs编译 2. 删除三个文件夹 参考...

CentOS7原有磁盘扩容实战记录(LVM非LVM)【针对GPT分区】
一、环境 二、命令及含义 fdisk fdisk是一个较老的分区表创建和管理工具,主要支持MBR(Master Boot Record)格式的分区表。MBR分区表支持的硬盘单个分区最大容量为2TB,最多可以有4个主分区。fdisk通过命令行界面进行操…...