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

【力扣 | SQL题 | 每日三题】力扣175, 176, 181

1. 力扣175:组合两个表

1.1 题目:

表: Person

+-------------+---------+
| 列名         | 类型     |
+-------------+---------+
| PersonId    | int     |
| FirstName   | varchar |
| LastName    | varchar |
+-------------+---------+
personId 是该表的主键(具有唯一值的列)。
该表包含一些人的 ID 和他们的姓和名的信息。

表: Address

+-------------+---------+
| 列名         | 类型    |
+-------------+---------+
| AddressId   | int     |
| PersonId    | int     |
| City        | varchar |
| State       | varchar |
+-------------+---------+
addressId 是该表的主键(具有唯一值的列)。
该表的每一行都包含一个 ID = PersonId 的人的城市和州的信息。

编写解决方案,报告 Person 表中每个人的姓、名、城市和州。如果 personId 的地址不在 Address 表中,则报告为 null 。

以 任意顺序 返回结果表。

结果格式如下所示。

示例 1:

输入: 
Person表:
+----------+----------+-----------+
| personId | lastName | firstName |
+----------+----------+-----------+
| 1        | Wang     | Allen     |
| 2        | Alice    | Bob       |
+----------+----------+-----------+
Address表:
+-----------+----------+---------------+------------+
| addressId | personId | city          | state      |
+-----------+----------+---------------+------------+
| 1         | 2        | New York City | New York   |
| 2         | 3        | Leetcode      | California |
+-----------+----------+---------------+------------+
输出: 
+-----------+----------+---------------+----------+
| firstName | lastName | city          | state    |
+-----------+----------+---------------+----------+
| Allen     | Wang     | Null          | Null     |
| Bob       | Alice    | New York City | New York |
+-----------+----------+---------------+----------+
解释: 
地址表中没有 personId = 1 的地址,所以它们的城市和州返回 null。
addressId = 1 包含了 personId = 2 的地址信息。

1.2 思路:

观察到Person表的两条记录的PersonId分别为1, 2,而Address表的两条记录分别为2, 3。可以考虑表连接。观察到输出不仅有PersonId为2的记录,还有PersonId为1 的记录,且它的city,state都为null,而两条name列都是来自Person表。即=>左外连接。即有两条表内连接的记录,又有左表不满足连接条件的记录。

1.3 题解:

select firstName, lastName, city, state
from Person t1 left join Address t2
on t1.personId = t2.personId ;

2. 力扣176:第二高的薪水

2.1 题目:

Employee 表:

+-------------+------+
| Column Name | Type |
+-------------+------+
| id          | int  |
| salary      | int  |
+-------------+------+
id 是这个表的主键。
表的每一行包含员工的工资信息。

查询并返回 Employee 表中第二高的 不同 薪水 。如果不存在第二高的薪水,查询应该返回 null(Pandas 则返回 None) 。

查询结果如下例所示。

示例 1:

输入:
Employee 表:
+----+--------+
| id | salary |
+----+--------+
| 1  | 100    |
| 2  | 200    |
| 3  | 300    |
+----+--------+
输出:
+---------------------+
| SecondHighestSalary |
+---------------------+
| 200                 |
+---------------------+

示例 2:

输入:
Employee 表:
+----+--------+
| id | salary |
+----+--------+
| 1  | 100    |
+----+--------+
输出:
+---------------------+
| SecondHighestSalary |
+---------------------+
| null                |
+---------------------+

2.2 思路:

首先去重,DISTINCT避免最高分不止一条记录,order by默认升序,使用desc使用逆序。再使用limit组合拳从第一条记录开始取,取一个元素。最后使用ifNull函数,如果第一个参数为null,则返回null。

2.3 题解:

select ifNull((select distinct salaryfrom Employeeorder by salary desclimit 1, 1), null) SecondHighestSalary;

3. 力扣181:超过经理收入的员工

3.1 题目:

表:Employee 

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| id          | int     |
| name        | varchar |
| salary      | int     |
| managerId   | int     |
+-------------+---------+
id 是该表的主键(具有唯一值的列)。
该表的每一行都表示雇员的ID、姓名、工资和经理的ID。

编写解决方案,找出收入比经理高的员工。

以 任意顺序 返回结果表。

结果格式如下所示。

示例 1:

输入: 
Employee 表:
+----+-------+--------+-----------+
| id | name  | salary | managerId |
+----+-------+--------+-----------+
| 1  | Joe   | 70000  | 3         |
| 2  | Henry | 80000  | 4         |
| 3  | Sam   | 60000  | Null      |
| 4  | Max   | 90000  | Null      |
+----+-------+--------+-----------+
输出: 
+----------+
| Employee |
+----------+
| Joe      |
+----------+
解释: Joe 是唯一挣得比经理多的雇员。

3.2 思路:

首先,这个人是员工,即它的managerId是非空的,并且它的薪水是大于它的经历的,求它的经理的薪水用到了相关子查询。

3.3 题解:

select name Employee
from Employee e1
where managerId is not null and 
salary > (select salary from Employee e2 where e1.managerId = e2.id);

相关文章:

  • CloudMusic:免费听歌
  • python功能测试
  • Tableau|一入门
  • error -- unsupported GNU version gcc later than 10 are not supported;(gcc、g++)
  • 网络编程(6)——发送的时序性,全双工通信
  • 一个 Java 语言简化处理 PDF 的框架,提供了一套简单易用的 API 接口,满足多样化需求又能简化开发流程的处理方案(附教程)
  • 【AD那些事 10 】焊盘如何修改为自己想要的形状!!!!! 焊盘设计规则如何更改??????
  • 【架构设计】同步与异步:应用场景与选择指南
  • cpu路、核、线程、主频、缓存
  • 相似度度量方法有哪些?
  • 数据结构--单链表
  • 创建Express后端项目
  • python之装饰器、迭代器、生成器
  • linux ip命令使用
  • npm run build报Cannot find module错误的解决方法
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • ES10 特性的完整指南
  • go语言学习初探(一)
  • js
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • js中forEach回调同异步问题
  • js中的正则表达式入门
  • magento 货币换算
  • Rancher-k8s加速安装文档
  • React 快速上手 - 07 前端路由 react-router
  • Redis学习笔记 - pipline(流水线、管道)
  • ⭐ Unity + OpenCV 实现实时图像识别与叠加效果
  • vuex 笔记整理
  • vue总结
  • Webpack入门之遇到的那些坑,系列示例Demo
  • Yii源码解读-服务定位器(Service Locator)
  • 闭包--闭包作用之保存(一)
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 初识 webpack
  • 仿天猫超市收藏抛物线动画工具库
  • 讲清楚之javascript作用域
  • 前端性能优化——回流与重绘
  • 三分钟教你同步 Visual Studio Code 设置
  • 什么软件可以剪辑音乐?
  • 使用putty远程连接linux
  • 收藏好这篇,别再只说“数据劫持”了
  • 微服务入门【系列视频课程】
  • 智能合约Solidity教程-事件和日志(一)
  • 智能网联汽车信息安全
  • Java总结 - String - 这篇请使劲喷我
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • ​【已解决】npm install​卡主不动的情况
  • ​520就是要宠粉,你的心头书我买单
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • !!Dom4j 学习笔记
  • #大学#套接字
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (Matlab)基于蝙蝠算法实现电力系统经济调度