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 ;

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

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

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

相关文章

其他合成方式介绍

在 SurfaceFlinger 的 Layer 处理逻辑中,除了常见的 Client Composition(GPU合成) 和 Device Composition(HWC合成),还存在一些特殊的合成方式,比如 Sideband、Solid Color 和 Display Decorati…

GraphRAG与知识图谱

一、GraphRAG介绍 1.1 什么是 Graph RAG? Graph RAG(Retrieval-Augmented Generation),是一种基于知识图谱的检索增强技术, 通过构建图模型的知识表达,将实体和关系之间的联系用图的形式进行展示&#xff…

一个开源的 VS Code 大模型聊天插件:Light-at

这篇文章是一个开发杂谈。对于有经验的开发者来说,可能这个项目并不算特别复杂或者高技术,只是对我个人来说算一个里程碑,因此写篇杂谈文章记录一下。也许也能给起步者一些参考。 项目地址:https://github.com/HiMeditator/light-…

SQL121 创建索引

-- 普通索引 CREATE INDEX idx_duration ON examination_info(duration);-- 唯一索引 CREATE UNIQUE INDEX uniq_idx_exam_id ON examination_info(exam_id);-- 全文索引 CREATE FULLTEXT INDEX full_idx_tag ON examination_info(tag);描述 现有一张试卷信息表examination_in…

【Pandas】pandas DataFrame set_flags

Pandas2.2 DataFrame Attributes and underlying data 方法描述DataFrame.index用于获取 DataFrame 的行索引DataFrame.columns用于获取 DataFrame 的列标签DataFrame.dtypes用于获取 DataFrame 中每一列的数据类型DataFrame.info([verbose, buf, max_cols, …])用于提供 Dat…

Linux终止进程(kill process)的一些玩法

经常运行一个程序时,表面上已经终止了,实际上还在后台运行。一来呢,它可能占据端口,导致端口复用的时候报错。二来呢,它可能占用GPU,让你显存直接少一块。 尤其是在多进程程序,假如运行“python…

《比特城传奇:公钥、私钥与网络安全的守护之战》

点击下面图片带您领略全新的嵌入式学习路线 🔥爆款热榜 88万阅读 1.6万收藏 第一章:双钥之谜 比特城的清晨总是笼罩着一层薄雾,仿佛这座城市本身就是由无数个0和1编织而成的幻境。在这里,信息如同空气般无处不在,但…

BGP路由协议之属性1

公认属性是所有 BGP 路由器都必须能够识别的属性 公认必遵 (Well-known Mandatory) : 必须包括在每个 Update 消息里公认任意 (Well-known Discretionary) : 可能包括在某些 Update 消息里。 可选属性不需要都被 BGP 路由器所识别 可选过渡(OptionalTransitive) : BGP 设备不…

Pr视频剪辑 Premiere Pro 2024 for Mac

Pr视频剪辑 Premiere Pro 2024 for Mac 文章目录 Pr视频剪辑 Premiere Pro 2024 for Mac一、介绍二、效果三、下载 一、介绍 Premiere Pro 2024 for Mac是一款专业的视频编辑软件,广泛应用于电影、电视、广告等领域。它为Mac用户提供了强大的剪辑、调色、音频处理等…

oracle 包的管理

在PL/SQL程序开发中,为了方便实现模块化程序的管理,可以将PL/SQL元素(如存储过程、函数、变量、常量、自定义数据类型、游标等)根据模块的程序结构组织在一起,存放在一个包中,称为一个完整的单元&#xff0…

LINUX 5 cat du head tail wc 计算机拓扑结构 计算机网络 服务器 计算机硬件

计算机网络 计算机拓扑结构 计算机按性能指标分:巨型机、大型机、小型机、微型机。大型机、小型机安全稳定,小型机用于邮件服务器 Unix系统。按用途分:专用机、通用机 计算机网络:局域网‘、广域网 通信协议’ 计算机终端、客户端…

从零开始的图论讲解(1)——图的概念,图的存储,图的遍历与图的拓扑排序

目录 前言 图的概念 1. 顶点和边 2. 图的分类 3. 图的基本性质 图的存储 邻接矩阵存图 邻接表存图 图的基本遍历 拓扑排序 拓扑排序是如何写的呢? 1. 统计每个节点的入度 2. 构建邻接表 3. 将所有入度为 0 的节点加入队列 4. 不断弹出队头节点,更新其…

强化学习Q-Learning:DQN

强化学习Q-Learning/DQN 本文是一篇学习笔记,主要参考李宏毅老师的强化学习课程。 目前主流的强化学习方法大致可以分为 policy-based 和 value-based 两大类。之前我们介绍的 policy gradient 策略梯度,就是 policy-based 的方法。本文要介绍的 Q-learn…

W公司云安全解决方案

1 安全理念DevOpvSec 统一安全运营 2 安全责任分层模型 3 云安全产品线 4 云安全解决方案/部署架构 5 安全能力 6 信创云平台适配 7 统一化安全运营 利用云安全平台实现统一的安全运维 8 安全资源池的统一纳管 9 案例分享:私有云 10 云安全解决方案的衍生特点 11 …

python中的in关键字查找的时间复杂度

列表(List) 对于列表来说, in 运算符的复杂度是 O(n),其中n是列表的长度。这意味着如果列表中有n个元素,那么执行 in 运算符需要遍历整个列表来查找目标元素。 以下是一个示例,演示了在列表中使用 in 运算…

MySQL基础 [一] - Ubuntu版本安装

目录 预安装 先查看自己操作系统的版本 添加MySQL APT下载源 下载 安装 正式安装 查看MySQL状态 打开MySQL 预安装 先查看自己操作系统的版本 lsb_release -a 添加MySQL APT下载源 下载 下载发布包 下载地址 : https://dev.mysql.com/downloads/repo/apt/ 这里下…

Springboot整合Mybatis+Maven+Thymeleaf学生成绩管理系统

前言 该系统为学生成绩管理系统,可以当作学习参考,也可以成为Spirng Boot初学者的学习代码! 系统描述 学生成绩管理系统提供了三种角色:学生,老师,网站管理员。主要实现的功能如下: 登录 &a…

操作系统之文件系统

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…

AG32:MCU和CPLD如何交互?

本文档介绍了AG32开发中,MCU与CPLD交互的具体方式以及例子。如需了解AG32更多资料可发邮件:salesagm-micro.com 一、MCU和CPLD直接交互 cpld工程创建及编译的操作流程,参考文档《AG32下fpga和cpld的使用入门》 在工程中,用户逻辑…

机器人轨迹跟踪控制——CLF-CBF-QP

本次使用MATLAB复现CLF-CBF-QP算法,以实现机器人轨迹跟踪同时保证安全性能 模型 使用自行车模型来进行模拟机器人的移动动态,具体的模型推导参考车辆运动学模型-自行车模型 采用偏差变量 p ~ = p − p r e f u ~ = u − u r e f \tilde{p} = p - p_{ref} \\ \tilde{u} = …