C/C++教程

leetcode数据库中等题目

本文主要是介绍leetcode数据库中等题目,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

176. 第二高的薪水

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

子查询去重查找第二高的薪水,如果为空用ifnull的第二个参数(null),查询结果起别名

177. 第N高的薪水

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 N, 1), null) as getNthHighestSalary
  );
END

参数N-1 再和上面一样进行查询

178. 分数排名

select a.Score, count(distinct(b.Score)) as 'Rank'
from Scores a join Scores b 
on b.Score >= a.Score 
group by a.Id 
order by a.Score desc;

连表查询,查出去重后b中分数大于等于a的条数进行计数,用a.id进行分组保证结果条数

180. 连续出现的数字

select distinct l.Num as ConsecutiveNums from Logs l join Logs o join Logs g on (l.id = o.id - 1 and l.Num = o.Num) and (o.id = g.id - 1 and o.Num = g.Num) 

连接查询三次,比较相邻的id的Num,三个连续相同的就查询出来,将结果去重保留一个

184. 部门工资最高的员工

select d.Name as 'Department', e.Name as 'Employee', e.Salary as 'Salary' from Employee e join Department d on e.DepartmentId = d.Id and (e.DepartmentId,e.Salary) in (select DepartmentId, max(Salary) from Employee group by DepartmentId)

使用子查询按部门id分组查询出每个部门中最高的工资,查询出表中雇员是否是对应部门最高的工资

626. 换座位

select s1.id as 'id', coalesce(s2.student, s1.student) as 'student' from seat s1 left join seat s2 on (s1.id = s2.id - 1 and s1.id % 2 = 1) or (s2.id = s1.id - 1 and s2.id % 2 = 1)
这篇关于leetcode数据库中等题目的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!