题目9:MySQL---------Department Top Three Salaries
2015-10-18 16:47
645 查看
The
for the department Id.
The
Write a SQL query to find employees who earn the top three salaries in each of the department. For the above tables, your SQL query should return the following rows.
答案:
Employeetable holds all employees. Every employee has an Id, 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 | | 5 | Janet | 69000 | 1 | | 6 | Randy | 85000 | 1 | +----+-------+--------+--------------+
The
Departmenttable holds all departments of the company.
+----+----------+ | Id | Name | +----+----------+ | 1 | IT | | 2 | Sales | +----+----------+
Write a SQL query to find employees who earn the top three salaries in each of the department. For the above tables, your SQL query should return the following rows.
+------------+----------+--------+ | Department | Employee | Salary | +------------+----------+--------+ | IT | Max | 90000 | | IT | Randy | 85000 | | IT | Joe | 70000 | | Sales | Henry | 80000 | | Sales | Sam | 60000 | +------------+----------+--------+
create table Employee ( Id int NOT NULL AUTO_INCREMENT, Name char(10) null, Salary int null, DepartmentId int null, primary key (Id) ); INSERT INTO Employee(Id ,Name,Salary,Departmentid) values(1,"Joe",70000,1); INSERT INTO Employee(Id ,Name,Salary,Departmentid) values(2,"Henry",80000,2); INSERT INTO Employee(Id ,Name,Salary,Departmentid) values(3,"Sam",60000,2); INSERT INTO Employee(Id ,Name,Salary,Departmentid) values(4,"Max",9000,1); INSERT INTO Employee(Id ,Name,Salary,Departmentid) values(5,"Janet",69000,1); INSERT INTO Employee(Id ,Name,Salary,Departmentid) values(6,"Randy",85000,1); create table Department ( Id INT NOT NULL auto_increment, Name char(10) NULL, primary key (Id) ); insert into Department(Id, Name) values(1,"IT"); insert into Department(Id, Name) values(2,"Sales");
答案:
select D.Name as Department, E.Name as Employee, E.Salary as Salary from Employee E, Department D where (select count(distinct(Salary)) from Employee where DepartmentId = E.DepartmentId and Salary > E.Salary) in (0, 1, 2) and E.DepartmentId = D.Id order by E.DepartmentId, E.Salary DESC;
相关文章推荐
- SQLSERVER 中GO的作用详解
- PL/SQL Developer连接本地Oracle 11g 64位数据库
- SQLSERVER 中GO的作用详解
- django页面请求sql分析中间件
- SQL DROP撤销索引、表以及数据库 高级教程
- Django 1.8.5中使用MySQL
- MySQL性能调优与架构设计--mysql日志文件
- MySQL性能调优与架构设计--MySql逻辑模块组成
- MySQL性能调优与架构设计--mysql自带工具使用
- golang连接mysql操作及动态连接池设置
- DayDayUP_Linux运维学习_MySQL 主从配置
- 从【MySQL server has gone away】说起
- SQL TOP 子句 高级教程
- mysql自动备份数据库,同时ftp上传到指定服务器
- SQL Server中的事务日志管理(2/9):事务日志架构概述
- MySQL server version for the right syntax to use near 'OPTION SQL_SELECT_LIMIT=DEFAULT’
- hadoop1.2.1集群安装hive1.2.0,用mysql作为元数据库
- ERROR 2006 (HY000): MySQL server has gone away
- shell脚本:监控MySQL服务是否正常
- shell脚本:监控MySQL服务是否正常