LeetCode SQL刷题

1、表联合
Table1: Person (PersonId is the primary key column for this table.)

Column NameType
PersonIdint
FirstNamevarchar
LastNamevarchar

Table2: Address (AddressId is the primary key column for this table.)

Column NameType
AddressIdint
PersonIdint
Cityvarchar
Statevarchar

用这两张表输出 FirstName, LastName, City, State四个字段,无论PersonId是否为空。

select person.FirstName,person.LastName,Address.City,Address.State 
from Person left join Address
on Person.PersonId = Address.PersonId  

2、 Second Highest Salary
table:employee

IdSalary
1100
2200
3300

question: give the second highest salary.If there is no second highest salary, then the query should return null.
求排名第二的工资,如果没有,返回NULL。

##用LIMIT限定数据记录查询数量
SELECT DISTINCT Salary  AS SecondHighestSalary
FROM Employee
ORDER BY Salary
LIMIT 1,1

以上写法没有考虑到 不存在第二位的情况,例如只有一条数据记录。这时把以上查询的结果作为临时表。

SELECT *
FROM(
SELECT DISTINCT Salary  
FROM Employee
ORDER BY Salary
LIMIT 1,1) AS SecondHighestSalary

另一种解法:

SELECT MAX(Salary) as SecondHighestSalary FROM Employee 
WHERE Salary NOT IN(SELECT MAX(Salary) from Employee)

3、Department Highest Salary

table1:The Employee table holds all employees

IdNameSalaryDepartmentId
1Joe700001
2Henry800002
3Sam600002
4Max900001

table2:The Department table holds all departments of the company.

IdName
1IT
2Sales

查找每个部门的最高工资,如下:

DepartmentEmployeeSalary
ITMax90000
SalesHenry80000
SELECT  Department.Name AS Department,A.Name AS Employee,A.Salary AS Salary
FROM
(SELECT Name, MAX(Salary) AS Salary,DepartmentId
FROM employee GROUP BY DepartmentId) A
LEFT JOIN Department 
ON A.DepartmentId = Department.Id

结果出错:
SELECT Name, MAX(Salary) AS Salary,DepartmentId
FROM employee GROUP BY DepartmentId
 按照DepartmentId分组后,每组如果有多个员工有相同的最高工资,而MAX只返回一个员工Name。

1.先联合两表,找出各个部门的最高薪水
SELECT  Department.Id, Department.Name, MAX(Salary) AS Salary
FROM employee JOIN Department
ON employee.DepartmentId = Department.Id
GROUP BY Department.Id

2. 与雇员表联合,匹配出该工资的员工,这样就包括每组有多个员工有相同的最高工资的情况。
SELECT t.Name AS Department, e.Name AS Employee, t.Salary
FROM
(SELECT Department.Id, 
        Department.Name AS Name,
        MAX(Salary) AS Salary
FROM Employee JOIN Department
ON Employee.DepartmentId = Department.Id
GROUP BY Department.Id
) t 
JOIN Employee  e
ON t.Id=e.DepartmentId and t.Salary=e.Salary
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值