LeetCode SQL刷题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/G090909/article/details/79525393

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

Column Name Type
PersonId int
FirstName varchar
LastName varchar

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

Column Name Type
AddressId int
PersonId int
City varchar
State varchar

用这两张表输出 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

Id Salary
1 100
2 200
3 300

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

Id Name Salary DepartmentId
1 Joe 70000 1
2 Henry 80000 2
3 Sam 60000 2
4 Max 90000 1

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

Id Name
1 IT
2 Sales

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

Department Employee Salary
IT Max 90000
Sales Henry 80000
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

猜你喜欢

转载自blog.csdn.net/G090909/article/details/79525393