タイトル
Employee表は、各従業員は、その対応するジョブ番号ID、名前、名前、給与および賃金部門番号のDepartmentIdのを持っている、すべての従業員に関する情報が含まれています。
Departmentテーブルには、会社のすべてのセクターに関する情報が含まれています。
3人の高い賃金を得るために、各部門の全従業員を見つけるために、SQLクエリを記述します。例えば、上記の表が与えられると、クエリの結果が返されるべきです。
説明:
IT部門は、マックスはウィルの給与が第三位、ランディとジョーが2番目に高い賃金を持っている、最も高い賃金を受け取りました。セールス(営業)の2つだけの従業員は、最高賃金ヘンリーは、サムの給与は、第二位。
分析
SELECT
*
FROM
employee;
SELECT
*
FROM
department;
-- 回忆一下 count 函数
-- count(字段名) # 返回表中该字段总共有多少条记录
-- 回忆一下 DISTINCT 关键字
-- DISTINCT 字段名 # 过滤字段中的重复记录
-- 我们先找出公司里前3高的薪水,意思是不超过三个值比这些值大
-- 公司里前3高
SELECT
e1.NAME AS 'Employee',
e1.Salary
FROM
Employee e1
WHERE
3 > -- 找出不超过三条的量
( SELECT count( DISTINCT e2.Salary ) FROM Employee e2 WHERE e2.Salary > e1.Salary -- 找出e2中的薪水比e1大的那些行
);
-- 各个部门的前三高
SELECT
d.NAME AS 'Department',
e1.NAME AS 'Employee',
e1.Salary
FROM
Employee e1
JOIN Department d ON e1.DepartmentId = d.Id
WHERE
3 > (
SELECT
COUNT( DISTINCT e2.Salary )
FROM
Employee e2
WHERE
e2.Salary > e1.Salary
AND e1.DepartmentId = e2.DepartmentId
);
答え
-- 各个部门的前三高
SELECT
d.NAME AS 'Department',
e1.NAME AS 'Employee',
e1.Salary
FROM
Employee e1
JOIN Department d ON e1.DepartmentId = d.Id
WHERE
3 > (
SELECT
COUNT( DISTINCT e2.Salary )
FROM
Employee e2
WHERE
e2.Salary > e1.Salary
AND e1.DepartmentId = e2.DepartmentId
);