leetcode数据库题sql题解(持更)(MYSQL)

这篇博客详细解析了LeetCode中涉及MySQL的数据库题目,包括如何找到第二、N高薪水,分数排名,连续数字,超过经理薪资的员工,重复邮箱,未订购客户,部门最高及前三薪资员工,以及解决重复数据的方法。通过这些实例,深入探讨了SQL在实际问题中的应用。
摘要由CSDN通过智能技术生成

175.组合两个数
Select Person.FirstName, Person.LastName, Address.City, Address.State
From Person
left join Address
on Person.PersonId = Address.PersonId
176.第二高的薪水
select Max(Salary)  as SecondHighestSalary
from Employee where (select Max(Salary)from Employee) > Salary
177.第N高的薪水
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN SET N:=N-1; 
  RETURN (
      # Write your MySQL query statement below.     
      select Salary
      FROM Employee
      group by Salary
      order by Salary DESC
      Limit N,1
  );
END
178.分数排名
SELECT Score, dense_rank() over (order by Score DESC) as `Rank`
from Scores;
180.连续出现的数字
select distinct a.Num as ConsecutiveNums 
from Logs as a,
   Logs as b,
   Logs as c
where a.Id = b.Id - 1 and b.Id = c.Id - 1 and a.Num= b.Num and b.Num = c.Num;
181.超过经理收入的员工
select e1.Name as Employee
from Employee as e1,Employee as e2
where e1.ManagerId = e2.Id and e1.Salary > e2.Salary
182.查找重复的电子邮箱
select Email 
from Person
group by Email
having Count(Id)>1
183.从不订购的客户

左连接两个表,找出Orders.Id为空的

select Customers.Name as Customers
from Customers
left join Orders on (Customers.Id = Orders.CustomerId)
where Orders.Id is null
184.部门工资最高的员工
SELECT
    Department.name AS 'Department',Employee.name AS 'Employee',Salary
FROM
    (Employee inner JOIN Department ON Employee.DepartmentId = Department.Id)
WHERE
    (Employee.DepartmentId , Salary) IN
    (   SELECT
            DepartmentId, MAX(Salary)
        FROM
            Employee
        GROUP BY DepartmentId
	)
185.部门工资前三高的员工

内连接之后使用窗口函数用dense_rank()排序,Department分组,然后显示出分别dense_rank()小于或等于3的人

select Department,Employee,Salary
FROM
(SELECT Department.name AS 'Department',Employee.name AS 'Employee',Salary,dense_rank() over(partition by Department.name order by Salary desc) as dense_num
FROM (Employee inner JOIN Department ON Employee.DepartmentId = Department.Id)) as a
where dense_num<=3
196.删除重复的
DELETE p1 FROM Person p1,
    Person p2
WHERE
    p1.Email = p2.Email AND p1.Id > p2.Id
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值