[演算法][SQL]演算法挑战系列(2)-Department Highest Salary

HI,这是演算法挑战挑战的第二篇,我这个人习惯有求必应,所以这篇就来解解SQL的题目吧!

题目名称:Department Highest Salary
难易度:中
题目内容:从EmployeeDepartment两张资料表中查询出各部门领最高薪水的人及金额。
例如:
Employee表内容:

IdNameSalaryDepartmentId1Joe7000012Henry8000023Sam6000024Max900001Department表内容:IdName--------------------------1IT2Sales查询结果:DepartmentEmployeeSalary---------------------------------------ITMax90000SalesHenry80000那以下开始动工:
/*SELECT资料栏位*/SELECT d.Name AS Department ,e.Name Employee ,s.salary/*以部门为主档*/FROM Department d LEFT JOIN    /*找出各部门的最高薪水*/    (SELECT MAX(Salary) Salary ,DepartmentId    FROM Employee     GROUP BY DepartmentId) s /*用部门编号取得部门名称*/ON s.DepartmentId = d.Id/*连结员工资料表*/LEFT JOIN Employee e /*用在哪个部门,以及该最高薪水找出对应的人名*/ON e.DepartmentId = s.DepartmentId AND e.Salary=s.Salary/*如果有该部门但没有人员会回传NULL,所以这时候把他过滤掉*/WHERE s.salary IS NOT NULL 

嘛...虽然我是用这个方式串出来了,但是其实我在下SQL的时候除非跑得特别慢,不然我都不会去注意到效能的问题,也没有认真研究过怎么处理资料会比较好,只想着最后出现是我要的就好,如果出现不了再从程式下手http://img2.58codes.com/2024/emoticon20.gif,所以我在SQL解题的时候通常都会硬凑,如果看到我的解题方式,有哪里可以改进的,再麻烦各位大大留言告诉我,我会在今后的写法一一尝试的http://img2.58codes.com/2024/emoticon41.gif

另外如果写法有误或有什么问题,也都可以告诉我,我在尽速修正,谢谢大家!


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章