每日一道Leetcode算法——sql题——2019.02.15

LeetCode面试经典150题解析与高效刷题指南 算法与数据结构是程序员技术面试的核心考察点,掌握常见算法思想如动态规划、二分查找等能显著提升解题效率。通过系统化的刷题训练,不仅可以深入理解这些基础概念的工作原理,还能培养工程实践中的问题解决能力。LeetCode面试经典150题精选高频考点,覆盖数据结构应用、算法思维等关键领域,特别适合用于技术面试准备。本文结合大厂面试官经验,详解题库结构与核心考点,并提供三阶训练体系、错题管理等实用方法论,帮助开发者高效提升算法能力与面试表现。 阅读详情

一题:Combine Two Tables    

中文:

Table: Person

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| PersonId    | int     |
| FirstName   | varchar |
| LastName    | varchar |
+-------------+---------+
PersonId is the primary key column for this table.

Table: Address

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| AddressId   | int     |
| PersonId    | int     |
| City        | varchar |
| State       | varchar |
+-------------+---------+
AddressId is the primary key column for this table.
为报告编写SQL查询,该报告为Person表中的每个人提供以下信息,无论这个人是否有一个地址:
FirstName, LastName, City, State

英文:

Table: Person

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| PersonId    | int     |
| FirstName   | varchar |
| LastName    | varchar |
+-------------+---------+
PersonId is the primary key column for this table.

Table: Address

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| AddressId   | int     |
| PersonId    | int     |
| City        | varchar |
| State       | varchar |
+-------------+---------+

AddressId is the primary key column for this table.

Write a SQL query for a report that provides the following information for each person in the Person table, regardless if there is an address for each of those people:
FirstName, LastName, City, State 

解题思路:

因为不管用户有没有对应的地址,一直要保证有用户数据,所以以person为左表,进行左关联。

# 创建Person表
Create table Person (PersonId int, FirstName varchar(255), LastName varchar(255));
# 创建Address表
Create table Address (AddressId int, PersonId int, City varchar(255), State varchar(255));
# 删除Person表中的所有数据,类似于delete from Person
Truncate table Person;
# 往Person表中插入一条数据
insert into Person (PersonId, LastName, FirstName) values ('1', 'Wang', 'Allen');
# 删除Address表中的所有数据
Truncate table Address;
# 往Address表中插入一条数据
insert into Address (AddressId, PersonId, City, State) values ('1', '2', 'New York City', 'New York');

# Date:2019.02.15
# num:195
# 解题答案:
# ==============================================================================
# 使用左关联查询表中的数据
SELECT p.FirstName,p.LastName,a.City,a.State from Person p left join Address a on p.PersonId = a.PersonId;

 


二题:Employees Earning More Than Their Managers    

中文:

Employee表包含所有员工,包括他们的经理。每个员工都有一个Id,并且还有一个经理Id列。 

+----+-------+--------+-----------+
| Id | Name  | Salary | ManagerId |
+----+-------+--------+-----------+
| 1  | Joe   | 70000  | 3         |
| 2  | Henry | 80000  | 4         |
| 3  | Sam   | 60000  | NULL      |
| 4  | Max   | 90000  | NULL      |
+----+-------+--------+-----------+

 给定Employee表,编写一个SQL查询,查找收入高于其经理的员工。对于上表,Joe是唯一一位收入超过其经理的员工。

+----------+
| Employee |
+----------+
| Joe      |
+----------+

英文:

The Employee table holds all employees including their managers. Every employee has an Id, and there is also a column for the manager Id.

+----+-------+--------+-----------+
| Id | Name  | Salary | ManagerId |
+----+-------+--------+-----------+
| 1  | Joe   | 70000  | 3         |
| 2  | Henry | 80000  | 4         |
| 3  | Sam   | 60000  | NULL      |
| 4  | Max   | 90000  | NULL      |
+----+-------+--------+-----------+

Given the Employee table, write a SQL query that finds out employees who earn more than their managers. For the above table, Joe is the only employee who earns more than his manager.

+----------+
| Employee |
+----------+
| Joe      |
+----------+

解题思路:

将表自身通过ManagerId进行关联,前半部分为自身信息,后半部分为经理信息,查询自身薪水大于经理薪水。

并将查询到的name重命名为Employee。

# 创建员工表,有id,名字,薪水,经理Id
CREATE TABLE
IF
	NOT EXISTS Employee ( Id INT, NAME VARCHAR ( 255 ), Salary INT, ManagerId INT );# 清空员工表中所有数据
TRUNCATE TABLE Employee;# 向员工表中插入4条数据
INSERT INTO Employee ( Id, NAME, Salary, ManagerId )
VALUES
	( '1', 'Joe', '70000', '3' );
INSERT INTO Employee ( Id, NAME, Salary, ManagerId )
VALUES
	( '2', 'Henry', '80000', '4' );
INSERT INTO Employee ( Id, NAME, Salary, ManagerId )
VALUES
	( '3', 'Sam', '60000', '0' );
INSERT INTO Employee ( Id, NAME, Salary, ManagerId )
VALUES
	( '4', 'Max', '90000', '0' );
DROP TABLE Employee;# date:2019.02.15
# num:181
# 解题答案:
# =====================================
# 将表自身通过ManagerId进行关联,前半部分为自身信息,后半部分为经理信息,查询自身薪水大于经理薪水
# 并将查询到的name重命名为Employee
SELECT
	A.`Name` AS Employee 
FROM
	Employee AS A,
	Employee AS B 
WHERE
	A.ManagerId = B.Id 
	AND A.Salary > B.Salary;

 


三题:Customers Who Never Order    

中文:

假设一个网站包含两个表,Customers表和Orders表。编写SQL查询以查找从未订购任何内容的所有客户。

Table: Customers.

+----+-------+
| Id | Name  |
+----+-------+
| 1  | Joe   |
| 2  | Henry |
| 3  | Sam   |
| 4  | Max   |
+----+-------+

Table: Orders.

+----+------------+
| Id | CustomerId |
+----+------------+
| 1  | 3          |
| 2  | 1          |
+----+------------+

使用上面的表作为示例,返回以下内容: 

+-----------+
| Customers |
+-----------+
| Henry     |
| Max       |
+-----------+

英文:

Suppose that a website contains two tables, the Customers table and the Orders table. Write a SQL query to find all customers who never order anything.

Table: Customers.

+----+-------+
| Id | Name  |
+----+-------+
| 1  | Joe   |
| 2  | Henry |
| 3  | Sam   |
| 4  | Max   |
+----+-------+

Table: Orders.

+----+------------+
| Id | CustomerId |
+----+------------+
| 1  | 3          |
| 2  | 1          |
+----+------------+

Using the above tables as example, return the following:

+-----------+
| Customers |
+-----------+
| Henry     |
| Max       |
+-----------+

解题思路:

第一种:

使用子查询。

查询在订单表中有的customerId作为查询条件,查询Customer表中Id不在其中的用户名称。

第二种:

使用左关联,将Customers和Orders表使用customerId进行关联,如果该用户不存在订单表中,则customerId为空。

# 创建客户表
CREATE TABLE
IF
	NOT EXISTS Customers ( Id INT, NAME VARCHAR ( 255 ) );
# 创建订单表
CREATE TABLE
IF
	NOT EXISTS Orders ( Id INT, CustomerId INT );
# 清空客户表原有数据,并插入数据
TRUNCATE TABLE Customers;
INSERT INTO Customers ( Id, NAME )
VALUES
	( '1', 'Joe' );
INSERT INTO Customers ( Id, NAME )
VALUES
	( '2', 'Henry' );
INSERT INTO Customers ( Id, NAME )
VALUES
	( '3', 'Sam' );
INSERT INTO Customers ( Id, NAME )
VALUES
	( '4', 'Max' );
# 清空订单表原有数据,并插入数据
TRUNCATE TABLE Orders;
INSERT INTO Orders ( Id, CustomerId )
VALUES
	( '1', '3' );
INSERT INTO Orders ( Id, CustomerId )
VALUES
	( '2', '1' );
# date: 2039.02.15
# num: 183
# 解题答案:
# =====================================
# 方法一:使用子查询。查询在订单表中有的customerId作为查询条件,查询Customer表中Id不在其中的用户名称。
SELECT NAME AS
	Customers 
FROM
	Customers 
WHERE
	Id NOT IN ( SELECT CustomerId FROM Orders );
	
# 方法二:使用左关联,将Customers和Orders表使用customerId进行关联,如果该用户不存在订单表中,则customerId为空。
SELECT
	* 
FROM
	Customers C
	LEFT JOIN Orders O ON C.Id = O.CustomerId 
WHERE
	O.CustomerId IS NULL;

 

数据库作业17:SQL练习9 – CURSOR 嵌入式SQL是将SQL语句嵌入到程序设计语言中,被嵌入的程序设计语言称为宿主语言,简称主语言。 SQL语言是面向集合的,一条SQL语句原则上可以产生或处理多条记录。 主语言是面向记录的,主变量一次只能存放一条记录。 游标(cursor)是系统为用户开设的数据缓冲区,存放SQL语句的执行结果。每个游标区都有一个名字,用户可以用SQL语句逐一从游标中获取记录,并赋给主变量,交由主语言进一步处理。 【使用游标的步骤】 (1)说明游标 用DECLARE语句为一条SELECT语句定义游标: EXEC SQL DECLARE CURSOR FOR ; 定义游标仅仅是一条说明性语句,这时RDBMS并不执行 立即下载

相关推荐

LeetCode力扣刷题数据库(175):组合两个表

题目 表1: Person 表2: Address 编写一个 SQL 查询,满足条件:无论 person 是否有地址信息,都需要基于上述两表提供 person 的以下信息: FirstName, LastName, City, State 分析 方法:使用 outer join 算法 因为表 Address 中的 personId 是表 Person 的外关键字,所以我们可以连接这两个表来获取一个人的地址信息。 考虑到可能不是每个人都有地址信息,我们应该使用 outer join 而不是默认的 inner join。 outer join 包括 left join , right join

SQL每日练习(一)

sql练习

codelady_g的博客 1471

Latex在VSCODE中编译报错`Recipe terminated with error. Retry building the project.

Latex在VSCODE中编译报错Recipe terminated with error. Retry building the project. 1 报错提示: Recipe terminated with error 2 报错原因 大概率的原因是因为latex没有添加到系统环境变量中,所有设置的编译工具没有办法找到才出现的这种情况 3 解决方案 请按照如下方式进行系统变量的添加 对windows,win+R 然后输入sysdm.cpl 在高级中选择环境变量 找到path环境变量,将txtlive中

呆呆象呆呆的博客 3万+

SQL实战每日一题(基础篇完结)

2021.11.212021.11.212021.11.21 查找最晚入职员工的所有信息 直观来看,是按照入职时间从大到小排序,然后取第一个即可 select * from employees order by hire_date desc limit 1; select * from employees order by hire_date desc limit 0, 1; select * from employees order by hire_date desc limit

solego’s blog 1221

c764-基于Vue的实时温湿度监控系统

🌟 毕业设计指导交流 🌟 同学们好!作为一名计算机专业的技术爱好者,我在毕业设计领域积累了一些经验,希望能和大家分享交流。从选题到答辩,欢迎一起探讨技术问题。💡 技术方向: 熟悉Java全栈(SSM/Spring Boot)、Python数据分析、微信小程序/安卓开发等技术栈,可以互相学习项目开发经验。📂 学习资源: 整理了一些开源项目案例(含代码和文档),需要参考的同学可以留言讨论,也欢迎分享你的项目经验。🛠 交流内容:✨ 欢迎在评论区留言讨论,一起进步!记得遵守社区规范,保持学术

weixin_39513710的博客 1068

学生党投稿Applied Soft Computing:从导师账号登录到通讯作者设置的全流程解惑

本文详细解析了学生投稿Applied Soft Computing期刊的全流程,重点介绍了导师账号登录、通讯作者设置、作者排序调整以及开放获取费用等关键环节的避坑技巧。针对LaTeX稿件处理和财务选项选择提供了实用建议,帮助学生顺利完成SCI期刊投稿。

weixin_30352191的博客 210

一天一道Sql题(day03)

union (all):要求列的顺序、数据类型和列数保持一致。区别就是不加all会对连接的结果去重。union all不会去重。思路:本题主要考查union all 连接两个sql语句,没什么难度。

weixin_64603931的博客 290

数字锁相环的原理与FPGA实现

数字锁相环是锁相环电路的全数字实现。锁相环电路能够实现对输入信号的相位进行跟踪,进而在噪声中提取纯净的有用信号。以上就是今天要讲的内容,本文简单地介绍了锁相环的原理,然后,在Vivado仿真平台上,通过verilog做仿真验证。最终仿真结果能够实现锁定,但锁定时间较长,表明参数仍可做调整。

weixin_45857378的博客 8505

一天一道Sql题(day02)

对OrderItems根据order_num进行分组,求出每个order_num对应的总金额即(sum(item_price*quantity)) total_ordered。查询 order_num,total_ordered两个字段作为mytable。所以用Orders表与mytable通过order_num进行左连接,去掉mytable中多余的数据。思路:本题要求每个客户的下单总额,下单总额只需OrderItems一张表即可求出,而且Orders表中一个客户对应一个order_num,相对比较简单。

weixin_64603931的博客 335

别再手动折腾了!PICO Unity SDK 一键配置开发环境保姆级教程(含PDC串流调试)

本文详细介绍了PICO Unity SDK的一键配置功能,帮助开发者快速搭建VR开发环境。通过自动化配置流程,大幅减少手动设置时间,提升开发效率。文章还涵盖了PDC串流调试技巧和常见问题解决方案,是PICO VR开发的实用指南。

weixin_30335575的博客 447

小论文/大论文必备| YOLO26热力图可视化,支持8种常用热力图方法:GradCAM,GradCAMPlusPlus,XGradCAM,EigenCAM,HiResCAM等,助力小论文和大论文加分

本文介绍了如何为YOLO26模型添加热力图可视化功能,包括完整代码和使用教程。热力图能增强模型的可解释性,适用于论文中的实验对比和结果展示。文章提供了详细的代码实现,包含图像处理、热力图生成和结果可视化等功能,并指导用户如何创建Python文件、粘贴代码以及调整参数生成最佳热力图。通过设置不同层号,用户可以灵活控制热力图效果,最终结果将保存在指定文件夹中。

Ai缝合怪、助力小伙伴高效发论文 490

SQL每日一题汇总

(点击上方蓝色字,可快速关注我们哦)之前做了一个SQL每日一题的专题系列,目的是希望大家将当天所学内容拿来练练手,其实SQL和许多编程语言类似,也是需要经常练,熟能生巧还...

SQL数据库开发 2184

使用亚组分析进行子组分析并可视化森林图 - R语言

通过亚组分析和森林图的结合,我们可以更好地理解不同子组之间的差异和效果大小。当然,在实际应用中,还需要考虑多种因素,如样本量、异质性等,以得到更准确的结果和结论。每个森林图中的水平线代表了每个子组的效应估计,线的长度表示了该效应估计的置信区间。假设我们有一个包含研究对象的数据框(data frame),其中包括了治疗组和对照组的结果数据,以及一些可能的影响因素作为调整变量。在本例中,我们将比较两种不同的治疗方法(A和B)对结果变量的影响,并调整了一个额外的变量。是结果变量和对照组变量的列名。

2301_79326857的博客 1233

【力扣 | SQL题 | 每日4题】力扣1596,1587,2228,2066

表中的每行数据表示一次交易的信息, 包括此次交易的账号(account_id), 交易类型(type), 交易发生时间(day), 交易发生金额(amount).Bob (customer 2) 一次订购键盘, 一次订购鼠标, 一次订购显示器, 所以这些都是 Bob 最经常订购的商品.- 2021-11-09 --> 取出1000. 余额变为 2000 - 1000 = 1000.- 2021-12-12 --> 取出 7000. 余额变为 7000 - 7000 = 0.

2301_80912559的博客 863

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【力扣 | SQL题 | 每日三题】力扣1068, 1204, 1193, 1084, 1141

表:Queueperson_id 是这个表具有唯一值的列。该表展示了所有候车乘客的信息。表中 person_id 和 turn 列将包含从 1 到 n 的所有数字,其中 n 是表中的行数。turn 决定了候车乘客上巴士的顺序,其中 turn=1 表示第一个上巴士,turn=n 表示最后一个上巴士。weight 表示候车乘客的体重,以千克为单位。有一队乘客在等着上巴士。然而,巴士有1000千克的重量限制,所以其中一部分乘客可能无法上巴士。编写解决方案找出最后一个。

2301_80912559的博客 1088

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【力扣 | SQL题 | 每日三题】力扣1050,619, 610, 604, 626, 1045

中的订单 '3' 和 '4' ,容易看出只有 'John' 和 'Pam' 两个销售员曾经向公司 'RED' 销售过。该表的每一行包含一个订单的信息。这包括公司的 ID 、销售人员的 ID 、订单日期和支付的金额。如果学生的数量是奇数,则最后一个学生的id不交换。该表的每一行都显示了销售人员的姓名和 ID ,以及他们的工资、佣金率和雇佣日期。该表的每一行都表示公司的名称和 ID ,以及公司所在的城市。如果不是最后一个奇数,取对应的id+1的记录的字段值。sales_id 是该表的主键列(具有唯一值的列)。

2301_80912559的博客 1144

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【力扣 | SQL题 | 每日四题】力扣1890, 1867, 1934, 1965

表:Logins| 列名 | 类型 |(user_id, time_stamp) 是这个表的主键(具有唯一值的列的组合)。每一行包含的信息是user_id 这个用户的登录时间。编写解决方案以获取在2020年登录过的所有用户的本年度最后一次登录时间。结果集不包含2020年没有登录过的用户。返回的结果集可以按任意顺序排列。返回结果格式如下例。示例 1:Logins 表:6号用户登录了3次,但是在2020年仅有一次,所以结果集应包含此次登录。

2301_80912559的博客 816

【力扣 + 牛客 | SQL题 | 每日4题】牛客大厂笔试真题SQLW6, W7, W8

注:该表score为对所有推荐给该用户的内容的综合评分,在计算用户平均评分切勿将推荐次数作为分母。解释:一共推荐8条内容,其中推荐给101、103、105、106四位用户的内容准确,注:该公司共开设了三门课程,员工可自愿原则性培训0-3项,每项课程每人可培训1次。解释:course1课程共有员工1、3、4、7共4名员工培训;解释:有员工3、4、5培训了course3课程,故结果如上。course2课程共有员工1、2、4、7共4名员工培训;course3课程共有员工3、4、5共3名员工培训;

2301_80912559的博客 991

SQL力扣刷题七

Table: Table: 编写SQL查询以查找每种产品的平均售价。 应该四舍五入到小数点后两位。 查询结果格式如下例所示: 题解一 题解二 题解三 1264. 页面推荐 朋友关系列表: 喜欢列表: 写一段 SQL 向user_id = 1 的用户,推荐其朋友们喜欢的页面。不要推荐该用户已经喜欢的页面。你返回的结果中不应当包含重复项。返回结果的格式如下例所示。示例 1: 题解一 题解二 题解三 题解四 1270. 向公司CEO汇报工作的所有人 员工表: 用 SQL 查询出所有直接或间接向公司

默主归沙的博客 746

力扣刷题:提升算法能力与面试准备的实战指南

算法是计算机科学的核心基础,其核心价值在于高效解决复杂问题。通过数据结构(如数组、哈希表)与算法(如动态规划、贪心算法)的结合,可以显著优化程序的时间与空间复杂度。在实际工程中,算法广泛应用于数据库查询、系统设计等场景。力扣(LeetCode)作为算法练习平台,其热题100集合涵盖高频面试考点,如两数之和、零钱兑换等经典问题。本文通过动态规划专题解析,展示如何通过主题式刷题法提升解题能力,并分享高效刷题方法论与面试转化技巧。

weixin_33806300的博客 399

每日leetcode

content 只包含字母数字字符,'!',' ',不包含其它特殊字符。推文 1 的长度 length = 14。推文 2 的长度 length = 32。查询所有无效推文的编号(ID)。当推文内容中的字符数。在 SQL 中,tweet_id 是这个表的主键。这个表包含某社交媒体 App 中所有的推文。时,该推文是无效的。

XiaoyaoCarter的博客 894

每日刷力扣SQL题(七)

使用自连,连接条件不太容易想到,需要使用 DATEDIFF 函数,这个函数可以计算两个日期之间的天数,然后使用 BETWEEN 条件(方案二和方案三)检查每一个 TIV_2015 是否是唯一的,如果不是唯一的且同时坐标是唯一的,那么这条记录就符合题目要求。所以我们可以将 requester_id 和 accepter_id 联合起来,然后统计每个人出现的次数。成为朋友是一个双向的过程,所以如果一个人接受了另一个人的请求,他们两个都会多拥有一个朋友。天的平均消费额,需要先知道每天的总消费额,作为临时表。

shafsyjwqt的博客 592
上一篇: 每日一道Leetcode算法——Middle of the Linked List——2019.02.13
下一篇: 每日一道Leetcode算法——sql题——2019.02.26
田小江爱分享
博客等级 码龄10年 34粉丝 143原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值