当前位置: 首页 > article >正文

LeetCode刷题SQL笔记

系列博客目录


文章目录

  • 系列博客目录
  • 1.distinct关键字 去除重复
  • 2.char_length()
  • 3.group by 与 count()连用
  • 4.date类型有个函数datediff()
  • 5.mod 函数
  • 6.join和left join的区别
      • 1. **`JOIN`(内连接,`INNER JOIN`)**
        • 示例:
      • 2. **`LEFT JOIN`(左外连接)**
        • 示例:
      • 总结:
      • 用途:
  • 7.AVG函数
      • 1. **`AVG()` 函数的基本用法**
        • 语法:
      • 2. **搭配 `GROUP BY` 使用**
        • 示例 1:计算每个部门的平均薪资
        • 示例 2:计算每个学生的平均成绩
      • 3. **不搭配 `GROUP BY` 使用**
        • 示例:计算所有员工的平均薪资
      • 4. **处理 `NULL` 值**
      • 5. **总结**
  • 8.
  • 9.CONCAT UPPER LOWER SUBSTRING
  • 10.


1.distinct关键字 去除重复

select distinct author_id as id from Views where author_id = viewer_id order by id;

2.char_length()

select tweet_id from Tweets where char_length(content) > 15;

3.group by 与 count()连用

select customer_id, count(customer_id) as count_no_trans 
from Visits left join Transactions on Visits.visit_id = Transactions.visit_id
where transaction_id is null group by customer_id;

4.date类型有个函数datediff()

select a.id 
from Weather as a cross join Weather as b on datediff(a.recordDate, b.recordDate) = 1
where  a.temperature > b.temperature;

5.mod 函数

select * from cinema where mod(id, 2) = 1 and description != 'boring' order by rating desc;

6.join和left join的区别

在 MySQL 中,JOINLEFT JOIN 都用于将两个或多个表连接在一起,但它们之间有重要的区别:

1. JOIN(内连接,INNER JOIN

  • 定义JOIN 默认是 INNER JOIN,表示仅返回两个表中满足连接条件的行。如果一个表中的某一行在另一个表中没有对应的匹配行,那么该行就不会出现在查询结果中。
  • 行为INNER JOIN 返回的是两个表中匹配的数据行,若某个表的某行在另一个表中找不到对应的匹配行,那么这一行就不会出现在查询结果中。
示例:

假设有两个表:

  • students(学生表)

    idname
    1Alice
    2Bob
    3Charlie
  • courses(课程表)

    student_idcourse
    1Math
    2Science
    4History

查询:SELECT students.name, courses.course FROM students JOIN courses ON students.id = courses.student_id;

结果

namecourse
AliceMath
BobScience
  • 只有 studentscourses 表中匹配的行会出现在结果中,Charlie 没有参加任何课程,所以不会出现在结果中。

2. LEFT JOIN(左外连接)

  • 定义LEFT JOIN 返回左表(即 FROM 后指定的第一个表)中的所有行,即使这些行在右表(即 JOIN 后指定的表)中没有匹配项。如果左表中的某行在右表中找不到对应的匹配行,那么右表中的字段会用 NULL 填充。
  • 行为LEFT JOIN 返回的是左表中的所有数据行,若右表没有与左表行匹配的数据,则右表的列将会用 NULL 填充。
示例:

使用同样的表 studentscourses,查询:SELECT students.name, courses.course FROM students LEFT JOIN courses ON students.id = courses.student_id;

结果

namecourse
AliceMath
BobScience
CharlieNULL
  • 即使 Charlie 没有参加任何课程,LEFT JOIN 仍然返回了 Charlie 的数据行,并且 courses.course 列显示为 NULL

总结:

  • JOININNER JOIN:只返回两个表中匹配的行。如果某行在另一个表中没有对应的行,则该行不会出现在结果中。
  • LEFT JOIN(左外连接):返回左表(FROM 后的表)中的所有行,即使右表中没有匹配的行。如果右表没有匹配项,右表的字段会填充 NULL

用途:

  • INNER JOIN:用于只关心两个表中匹配的记录,常见于查询需要联动的数据。
  • LEFT JOIN:用于查询左表中的所有数据,即使右表没有匹配的记录。例如,查询所有学生及其参加的课程,即使有些学生没有参加任何课程。

mysql中join 我后面不加条件呢?在 MySQL 中,如果在使用 JOIN 时不加连接条件,会发生笛卡尔积(Cartesian Product)。笛卡尔积是指将两个表的每一行与另一个表的每一行进行配对,导致结果集的行数是两个表行数的乘积。

7.AVG函数

AVG() 函数是 SQL 中一个聚合函数,用于计算某一列的 平均值。它会计算某列所有非 NULL 值的平均数。

1. AVG() 函数的基本用法

AVG() 函数可以用于数值型数据列(如整数、浮动数等),它返回该列的平均值。

语法:
AVG(column_name)
  • column_name:要计算平均值的列。

2. 搭配 GROUP BY 使用

通常,AVG() 函数会与 GROUP BY 子句一起使用,这样可以对数据进行分组计算每个组的平均值。GROUP BY 会根据指定的列对数据进行分组,AVG() 会分别计算每个分组的平均值。

示例 1:计算每个部门的平均薪资

假设有一个员工表 employees,包含以下字段:employee_iddepartmentsalary

SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department;

解释

  • AVG(salary):计算每个部门的平均薪资。
  • GROUP BY department:将数据按部门进行分组,对每个部门计算薪资的平均值。

结果

departmentavg_salary
HR5000
IT6000
Sales4500

这个查询的结果是每个部门的平均薪资。

示例 2:计算每个学生的平均成绩

假设有一个 students 表,记录学生的成绩:

SELECT student_id, AVG(score) AS avg_score
FROM scores
GROUP BY student_id;

解释

  • AVG(score):计算每个学生的平均成绩。
  • GROUP BY student_id:按学生的 ID 对数据进行分组。

结果

student_idavg_score
185.5
278.0

3. 不搭配 GROUP BY 使用

如果不使用 GROUP BYAVG() 会计算整个数据集的平均值,而不是每个分组的平均值。

示例:计算所有员工的平均薪资

如果你不使用 GROUP BY,就会得到整个表的平均值。

SELECT AVG(salary) AS avg_salary
FROM employees;

结果

avg_salary
5500

这个查询计算的是所有员工的平均薪资,而没有分组。

4. 处理 NULL

AVG() 会忽略 NULL 值,它只会计算那些非 NULL 的记录。例如,如果某个员工的薪资为 NULL,则该值不会影响平均薪资的计算。

5. 总结

  • AVG() 函数计算某列的平均值。
  • GROUP BY 通常与 AVG() 配合使用,用于对数据进行分组并计算每个分组的平均值。
  • 如果不使用 GROUP BYAVG() 会计算整个表的平均值。
  • AVG() 会忽略 NULL 值。

AVG() 是常用的聚合函数之一,用于执行汇总统计,特别适用于报告和数据分析任务。

8.

select Product.product_id, product_name
from Product left join Sales on Product.product_id = Sales.product_id
group by product_id
having count(sale_date between '2019-01-01' and '2019-03-31' or null) = count(*);

这里值得注意的是count的条件用法。举个例子count(age > 20 or null)这个语句,里面or null必须加,否则就等价于count(*)了,要么就是写作sum(age > 20)也可以。

我猜测是因为age > 20返回的是0或者1,而count对于不管是0还是1,都是会计数一次的,只有Null不会被计数。所以这个age > 20 or null表达的是不大于20就转换为null,这样就不会被count计数

作者:喜刷刷
链接:https://leetcode.cn/problems/sales-analysis-iii/description/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

9.CONCAT UPPER LOWER SUBSTRING

SELECT user_id, CONCAT(UPPER(SUBSTRING(name, 1, 1)), LOWER(SUBSTRING(name, 2))) AS name
FROM Users
ORDER BY user_id;
SUBSTRING(string, start, length)

string:要从中提取子字符串的原始字符串。
start:子字符串的起始位置(从 1 开始)。
length:要提取的字符数(可选,如果省略,则提取从起始位置到字符串末尾的所有字符)。

10.

select 
(select distinct salary
from Employee
order by salary desc
limit 1 offset 1 ) as SecondHighestSalary ;

虽然这没有显式创建临时表,但在某种意义上,子查询的结果就充当了临时表的角色。
在这里插入图片描述

相关文章:

LeetCode刷题SQL笔记

系列博客目录 文章目录 系列博客目录1.distinct关键字 去除重复2.char_length()3.group by 与 count()连用4.date类型有个函数datediff()5.mod 函数6.join和left join的区别1. **JOIN(内连接,INNER JOIN)**示例: 2. **LEFT JOIN&a…...

如何使用 IntelliJ IDEA 开发命令行程序(或 Swing 程序)并手动管理依赖(不使用 pom.xml)

以下是详细步骤: 1. 创建项目 1.1 打开 IntelliJ IDEA。 1.2 在启动界面,点击 Create New Project(创建新项目)。 1.3 选择 Java,然后点击 Next。 1.4 确保 Project SDK 选择了正确的 JDK 版本&#x…...

循环神经网络 - 参数学习之随时间反向传播算法

本文中,我们以同步的序列到序列模式为例来介绍循环神经网络的参数学习。 循环神经网络中存在一个递归调用的函数 𝑓(⋅),因此其计算参数梯度的方式和前馈神经网络不太相同。在循环神经网络中主要有两种计算梯度的方式:随时间反向…...

球类(继承和多态)

父类Ball,设置为抽象类,调用get和set方法创建对象,将子类重写的功能函数抽象化。 // 抽象球类 abstract class Ball {private String name;private double radius; // 半径private double weight; // 重量private double price; // 价格// 构…...

DFS和BFS的模版

dfs dfs金典例题理解就是走迷宫 P1605 迷宫 - 洛谷 dfs本质上在套一个模版&#xff1a; ///dfs #include<bits/stdc.h> using namespace std; int a[10][10]{0}; int m,n,t,ans0; int ex,ey; int v[10][10]{0}; int dx[4]{-1,0,1,0}; int dy[4]{0,1,0,-1}; void dfs(in…...

Ansible Playbook 进阶探秘:Handlers、变量、循环及条件判断全解析

192.168.60.100ansible.com192.168.60.110 client-1.com 192.168.60.120client-2.com192.168.60.130client-1.com 一、Handlers 介绍&#xff1a;在发生改变时执行的操作(类似puppet通知机制) 示例&#xff1a; 当apache的配置文件发生改变时&#xff0c;apache服务才会重启…...

大模型ui设计SVG输出

你是一位资深 SVG 绘画设计师&#xff0c;现需根据以下产品需求创建SVG方案&#xff1a; 产品需求 约拍app 画板尺寸&#xff1a; 宽度&#xff1a;375px&#xff08;基于提供的HTML移动设计&#xff09;高度&#xff1a;812px&#xff08;iPhone X/XS 尺寸&#xff09; 配…...

40--华为IPSec VPN实战指南:构建企业级加密通道

&#x1f6e1;️ 华为IPSec VPN实战指南&#xff1a;构建企业级加密通道 “当数据开始穿盔甲&#xff0c;黑客只能望’密’兴叹” —— 本文将手把手教你用华为设备搭建军用级加密隧道&#xff0c;从零开始构建网络长城&#xff01; 文章目录 &#x1f6e1;️ 华为IPSec VPN实战…...

基于分布式指纹引擎的矩阵运营技术实践:突破平台风控的工程化解决方案

一、矩阵运营的技术痛点与市场现状 风控机制升级 主流平台通过复合指纹识别&#xff08;Canvas渲染哈希WebGL元数据AudioContext频率分析&#xff09;检测多账号关联传统方案成本&#xff1a;单个亚马逊店铺因关联封号月均损失$5000&#xff0c;矩阵规模越大风险指数级增长 …...

MATLAB的24脉波整流器Simulink仿真与故障诊断

本博客来源于CSDN机器鱼&#xff0c;未同意任何人转载。 更多内容&#xff0c;欢迎点击本专栏目录&#xff0c;查看更多内容。 目录 0 引言 1 故障数据采集 2 故障特征提取 3 故障诊断分类 4 结语 本博客内容是在MATLAB2023下完成。 0 引言 对于电力电子电路的故障诊断…...

linux第三次作业

1、将你的虚拟机的网卡模式设置为nat模式&#xff0c;给虚拟机网卡配置三个主机位分别为100、200、168的ip地址 2、测试你的虚拟机是否能够ping通网关和dns&#xff0c;如果不能请修改网关和dns的地址 3、将如下内容写入/etc/hosts文件中&#xff08;如果有多个ip地址则写多行&…...

国标GB28181视频平台EasyCVR顺应智慧农业自动化趋势,打造大棚实时视频监控防线

一、方案背景 近年来&#xff0c;温室大棚种植技术凭借其显著的优势&#xff0c;在提升农作物产量和质量、丰富农产品供应方面发挥了重要的作用&#xff0c;极大改善了人们的生活水平&#xff0c;得到了广泛的推广和应用。大棚内的温度、湿度、光照度和二氧化碳浓度等环境因素…...

HOW - 如何测试 React 代码

目录 一、使用 React 测试库&#xff1a;testing-library/react二、使用测试演练场&#xff1a;testing-playground.com三、使用 Cypress 或 Playwright 进行端到端测试四、使用 MSW 在测试中模拟网络请求 一、使用 React 测试库&#xff1a;testing-library/react testing-li…...

LU分解原理与C++实现:从理论到实践

LU分解原理与C++实现:从理论到实践 a. LU分解基础理论 矩阵的LU分解在数值计算领域占据着举足轻重的地位,它不仅是解决线性方程组的有力工具,还在众多科学与工程问题中发挥着关键作用。从数学定义来看,LU分解是将一个方阵 A A A 分解为一个单位下三角矩阵 L L L 和一个…...

【Vue3知识】组件间通信的方式

组件间通信的方式 概述**1. 父子组件通信****父组件向子组件传递数据&#xff08;Props&#xff09;****子组件向父组件发送事件&#xff08;自定义事件&#xff09;** **2. 兄弟组件通信****通过父组件中转****使用全局状态管理&#xff08;如 Pinia 或 Vuex&#xff09;** **…...

HOOPS Visualize:跨平台、高性能的三维图形渲染技术解析

在当今数字化时代&#xff0c;三维可视化技术已成为众多行业的核心竞争力。HOOPS Visualize作为一款功能强大的三维图形渲染引擎&#xff0c;凭借其卓越的渲染能力、跨平台支持、丰富的交互功能、高度定制化以及快速部署等特性&#xff0c;为开发人员提供了构建高质量、高性能3…...

git 的常用指令

以下是 Git 命令分类大全&#xff0c;覆盖日常开发、团队协作和高级操作场景&#xff0c;按功能分类整理&#xff1a; 一、配置与初始化 命令说明git config --global user.name "Your Name"设置全局用户名git config --global user.email "emailexample.com&q…...

python学智能算法(九)|决策树深入理解

【1】引言 前序学习进程中&#xff0c;初步理解了决策树的各个组成部分&#xff0c;此时将对决策树做整体解读&#xff0c;以期实现深入理解。 各个部分的解读文章链接为&#xff1a; python学智能算法&#xff08;八&#xff09;|决策树-CSDN博客 【2】代码 【2.1】完整代…...

蓝桥杯 C/C++ 组历届真题合集速刷(一)

一、1.单词分析 - 蓝桥云课 &#xff08;模拟、枚举&#xff09;算法代码&#xff1a; #include <bits/stdc.h> using namespace std;int main() {string s;cin>>s;unordered_map<char,int> mp;for(auto ch:s){mp[ch];}char result_charz;int max_count0;fo…...

多类型医疗自助终端智能化升级路径(代码版.上)

大型医疗自助终端的智能化升级是医疗信息化发展的重要方向,其思维链一体化路径需要围绕技术架构、数据流协同、算法优化和用户体验展开: 一、技术架构层:分布式边缘计算与云端协同 以下针对技术架构层的分布式边缘计算与云端协同模块,提供具体编程实现方案: 一、边缘节点…...

区间 DP 详解

文章目录 区间 DP分割型合并型环形合并 区间 DP 区间 DP&#xff0c;就是在对一段区间进行了若干次操作后的最小代价&#xff0c;一般是合并和拆分类型。 分割型 分割型&#xff0c;指把一个区间内的几项分开拆成一份一份的&#xff0c;再全部合起来就是当前答案&#xff0c…...

如何在多线程中安全地使用 PyAudio

1. 背景介绍 在多线程环境下使用 PyAudio 可能会导致段错误&#xff08;Segmentation Fault&#xff09;或其他不可预期的行为。这是因为 PyAudio 在多线程环境下可能会出现资源冲突或线程安全问题。 PyAudio 是一个用于音频输入输出的 Python 库&#xff0c;它依赖于 PortAu…...

QAM 信号的距离以及能量归一化

QAM星座图平均功率能量_星座图功率计算-CSDN博客 正交幅度调制(QAM) - Vinson88 - 博客园 不同阶QAM调制星座图中&#xff0c;符号能量的归一化计算原理_qpsk的星座图归一化-CSDN博客 https://zhuanlan.zhihu.com/p/690157236...

Reactive编程框架与工具

文章目录 6.2 后端 Reactive 框架6.2.1 Spring WebFlux核心架构核心组件实际应用高级特性性能优化适用场景与限制 6.2.2 Akka&#xff08;Actor模型&#xff09;Actor模型基础基本用法高级特性响应式特性实现性能优化实际应用场景优势与挑战 6.2.3 Vert.x&#xff08;事件驱动&…...

五子棋游戏开发:静态资源的重要性与设计思路

以下是以CSDN博客的形式整理的关于五子棋游戏静态资源需求的文章&#xff0c;基于我们之前的讨论&#xff0c;内容结构清晰&#xff0c;适合开发者阅读和参考。我尽量保持技术性、实用性&#xff0c;同时加入一些吸引读者的亮点。 五子棋游戏开发&#xff1a;静态资源的重要性与…...

Python爬虫第7节-requests库的高级用法

目录 前言 一、文件上传 二、Cookies 三、会话维持 四、SSL证书验证 五、代理设置 六、超时设置 七、身份认证 八、Prepared Request 前言 上一节&#xff0c;我们认识了requests库的基本用法&#xff0c;像发起GET、POST请求&#xff0c;以及了解Response对象是什么。…...

Maven的安装配置-项目管理工具

各位看官&#xff0c;大家早安午安晚安呀~~~ 如果您觉得这篇文章对您有帮助的话 欢迎您一键三连&#xff0c;小编尽全力做到更好 欢迎您分享给更多人哦 今天我们来学习&#xff1a;Maven的安装配置-项目管理工具 目录 1.什么是Maven&#xff1f;Maven用来干什么的&#xff1f…...

智能 SQL 优化工具 PawSQL 月度更新 | 2025年3月

&#x1f4cc; 更新速览 本月更新包含 21项功能增强 和 9项问题修复&#xff0c;重点提升SQL解析精度与优化建议覆盖率。 一、SQL解析能力扩展 ✨ 新增SQL语法解析支持 SELECT...INTO TABLE 语法解析&#xff08;3/26&#xff09; ALTER INDEX RENAME/VISIBLE 语句解析&#…...

Ubuntu虚拟机编译安装部分OpenCV模块方法实现——保姆级教程

Ubuntu虚拟机的安装过程可以查看另一篇文章&#xff1a;VMware安装Ubuntu虚拟机实现COpenCV代码在虚拟机下运行教程-CSDN博客 目前我们已经下载好了OpenCV&#xff0c;这里以OpenCV4.5.2为例。 在内存要求尽可能小的情况下&#xff0c;可以尝试只编译安装代码中使用到的OpenC…...

find指令中使用正则表达式

linux查找命令能结合正则表达式吗 find命令要使用正则表达式需要结合-regex参数 另&#xff0c;-type参数可以指定查找类型(f为文件&#xff0c;d为文件夹) rootlocalhost:~/regular_expression# ls -alh 总计 8.0K drwxr-xr-x. 5 root root 66 4月 8日 16:26 . dr-xr-…...