LeetCode 数据库题解合集。
175. 组合两个表
题目描述
表1: Person
1 | +-------------+---------+ |
表2: Address
1 | +-------------+---------+ |
编写一个 SQL 查询,满足条件:无论 person 是否有地址信息,都需要基于上述两表提供 person 的以下信息:
1 | FirstName, LastName, City, State |
SQL
1 | SELECT FirstName, LastName, City, State |
176. 第二高的薪水
题目描述
编写一个 SQL 查询,获取 Employee
表中第二高的薪水(Salary) 。
1 | +----+--------+ |
例如上述 Employee
表,SQL查询应该返回 200
作为第二高的薪水。如果不存在第二高的薪水,那么查询应返回 null
。
1 | +---------------------+ |
SQL
1 | SELECT ( |
注意:1.表中可能存在重复的薪水,因此需要去重;2.若不存在第二高的薪水,则返回NULL(而不是0条记录)。
177. 第N高的薪水
题目描述
编写一个 SQL 查询,获取 Employee
表中第 n 高的薪水(Salary)。
1 | +----+--------+ |
例如上述 Employee
表,n = 2 时,应返回第二高的薪水 200
。如果不存在第 n 高的薪水,那么查询应返回 null
。
1 | +------------------------+ |
SQL
1 | CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT |
178. 分数排名
题目描述
编写一个 SQL 查询来实现分数排名。如果两个分数相同,则两个分数排名(Rank)相同。请注意,平分后的下一个名次应该是下一个连续的整数值。换句话说,名次之间不应该有“间隔”。
1 | +----+-------+ |
例如,根据上述给定的 Scores
表,你的查询应该返回(按分数从高到低排列):
1 | +-------+------+ |
SQL
思路:自连接。
1 | SELECT s.Score, ( |
180. 连续出现的数字
题目描述
编写一个 SQL 查询,查找所有至少连续出现三次的数字。
1 | +----+-----+ |
例如,给定上面的 Logs
表, 1
是唯一连续出现至少三次的数字。
1 | +-----------------+ |
SQL
1 | SELECT |
181. 超过经理收入的员工
题目描述
Employee
表包含所有员工,他们的经理也属于员工。每个员工都有一个 Id,此外还有一列对应员工的经理的 Id。
1 | +----+-------+--------+-----------+ |
给定 Employee
表,编写一个 SQL 查询,该查询可以获取收入超过他们经理的员工的姓名。在上面的表格中,Joe 是唯一一个收入超过他的经理的员工。
1 | +----------+ |
SQL
1 | # 方法一:相关子查询 |
182. 查找重复的电子邮箱
题目描述
编写一个 SQL 查询,查找 Person
表中所有重复的电子邮箱。
示例:
1 | +----+---------+ |
根据以上输入,你的查询应返回以下结果:
1 | +---------+ |
SQL
1 | # 方法一:自连接 |
183. 从不订购的客户
题目描述
某网站包含两个表,Customers
表和 Orders
表。编写一个 SQL 查询,找出所有从不订购任何东西的客户。
Customers
表:
1 | +----+-------+ |
Orders
表:
1 | +----+------------+ |
SQL
1 | SELECT Name AS Customers |
184. 部门工资最高的员工
题目描述
Employee
表包含所有员工信息,每个员工有其对应的 Id, salary 和 department Id。
1 | +----+-------+--------+--------------+ |
Department
表包含公司所有部门的信息。
1 | +----+----------+ |
编写一个 SQL 查询,找出每个部门工资最高的员工。例如,根据上述给定的表格,Max 在 IT 部门有最高工资,Henry 在 Sales 部门有最高工资。
1 | +------------+----------+--------+ |
SQL
1 | SELECT |
197. 上升的温度
题目描述
给定一个 Weather
表,编写一个 SQL 查询,来查找与之前(昨天的)日期相比温度更高的所有日期的 Id。
1 | +---------+------------------+------------------+ |
例如,根据上述给定的 Weather
表格,返回如下 Id:
1 | +----+ |
SQL
1 | SELECT a.Id |
注意:DATEDIFF()函数用于计算两个日期之差。
例如,DATEDIFF(‘2015-01-04’,’2015-01-03’)返回1,DATEDIFF(‘2015-01-03’,’2015-01-04’)返回-1。
595. 大的国家
题目描述
这里有张 World
表
1 | +-----------------+------------+------------+--------------+---------------+ |
如果一个国家的面积超过300万平方公里,或者人口超过2500万,那么这个国家就是大国家。
编写一个SQL查询,输出表中所有大国家的名称、人口和面积。
例如,根据上表,我们应该输出:
1 | +--------------+-------------+--------------+ |
SQL
1 | SELECT name, population, area |
596. 超过5名学生的课
题目描述
有一个courses
表 ,有: student (学生) 和 class (课程)。
请列出所有超过或等于5名学生的课。
例如,表:
1 | +---------+------------+ |
应该输出:
1 | +---------+ |
Note:
学生在每个课中不应被重复计算。
SQL
思路:使用分组语句,并注意去重。
1 | SELECT class |
620. 有趣的电影
题目描述
某城市开了一家新的电影院,吸引了很多人过来看电影。该电影院特别注意用户体验,专门有个 LED显示板做电影推荐,上面公布着影评和相关电影描述。
作为该电影院的信息部主管,您需要编写一个 SQL查询,找出所有影片描述为非 boring (不无聊) 的并且 id 为奇数 的影片,结果请按等级 rating 排列。
例如,下表 cinema:
1 | +---------+-----------+--------------+-----------+ |
对于上面的例子,则正确的输出是为:
1 | +---------+-----------+--------------+-----------+ |
SQL
1 | SELECT id, movie, description, rating |
注意:MOD()函数用于求余数。
627. 交换工资
题目描述
给定一个 salary 表,如下所示,有 m = 男性 和 f = 女性 的值。交换所有的 f 和 m 值(例如,将所有 f 值更改为 m,反之亦然)。要求只使用一个更新(Update)语句,并且没有中间的临时表。
注意,您必只能写一个 Update 语句,请不要编写任何 Select 语句。
例如:
1 | | id | name | sex | salary | |
运行你所编写的更新语句之后,将会得到以下表:
1 | | id | name | sex | salary | |
SQL
1 | # 方法一:CASE ... WHEN |