程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> [LeetCode]DepartmentHighestSalary,解題報告

[LeetCode]DepartmentHighestSalary,解題報告

編輯:DB2教程

[LeetCode]DepartmentHighestSalary,解題報告


題目

The Employee table holds all employees. Every employee has an Id, a salary, and there is also a column for the department Id.

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

The Department table holds all departments of the company.

Id Name 1 IT 2 Sales

Write a SQL query to find employees who have the highest salary in each of the departments. For the above tables, Max has the highest salary in the IT department and Henry has the highest salary in the Sales department.

Department Employee Salary IT Max 90000 Sales Henry 80000

思路

看到這到題目,我首先考慮的是數據庫級聯。具體思路如下:

查找每一部門的最高薪水。
select e.DepartmentId, MAX(e.Salary) as Salary, d.Name as Department from Employee as e inner join Department as d on e.DepartmentId = d.Id group by e.DepartmentId;

語句執行完成後,生成的表結構如下:

DepartmentId Salary Department 1 9000 IT 2 8000 Sales

2. 用上述生成的臨時表和Employee表再做級聯,找出題目要求的字段。

select t.Department as Department, e.Name as Employee, t.Salary as Salary from Employee as e inner join (1-sql生成的表) as t on e.Salary = t.Salary and and e.DepartmentId = t.DepartmentId;

AC SQL

最終的ac sql語句如下:

select t.Department as Department, e.Name as Employee, t.Salary as Salary from Employee as e inner join (select e.DepartmentId, MAX(e.Salary) as Salary, d.Name as Department from Employee as e inner join Department as d on e.DepartmentId = d.Id group by e.DepartmentId) as t on e.Salary = t.Salary and e.DepartmentId = t.DepartmentId;

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved