版权声明:本文为博主原创文章,未经博主允许不得转载。 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