mysql 力扣题目以及解答

1. 力扣195:联结两张表

题目略
编写一个 SQL 查询,满足条件:无论 person 是否有地址信息,都需要基于上述两表提供 person 的以下信息:

FirstName, LastName, City, State

解答

此题应该很简单了,考查的是两张表联结,行数不同的连接会有怎么样的效果呢?(这就是左联结和右联结的选用了)

  • person(行数少的那张表)左联结Address,这样不会丢失数据,数据不足的列元素为null。
select FirstName, LastName, City, State
from Person left join Address
on Person.PersonId = Address.PersonId;

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

题目描述:给你一张人事薪水表格,求表格中薪水第二高的数据,
解答
1、先过滤掉薪水最高的数据,然后从剩下的数据中找到最高的,(还有判断薪水第二高为空的和第二高的薪水不只有一个的情况)

select ifnull(
(select max(salary) from Employee where salary < (select max(salary) from Employee) limit 1),null)
as SecondHighestSalary

2、去重,再从薪水高的往薪水低的排序,选择第二行的那个薪水(可以limit 1,1-------->限制一个结果,取偏移量为1)。

select ifnull(
(select distinct salary from Employee order by salary desc limit 1,1),null)
as SecondHighestSalary

2. 力扣177:第N高的薪水

解答
与上题思路2一样,先去重,再从薪水高的往薪水低的排序,取偏移量为n,这里比较麻烦的是不能 limit 1 offset n-1 。

CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
    set n=n-1;
  RETURN (
      # Write your MySQL query statement below.
      select ifnull(
      (select  distinct Salary  from Employee order by salary desc limit 1 offset n)
          ,null)
      
  )

更新中。。。

你可能感兴趣的:(sql)