1.表: Employee
+--------------+---------+
| 列名 | 类型 |
+--------------+---------+
| id | int |
| name | varchar |
| salary | int |
| departmentId | int |
+--------------+---------+
id是此表的主键列。
departmentId是Department表中ID的外键。
此表的每一行都表示员工的ID、姓名和工资。它还包含他们所在部门的ID。
表: Department
+-------------+---------+
| 列名 | 类型 |
+-------------+---------+
| id | int |
| name | varchar |
+-------------+---------+
id是此表的主键列。
此表的每一行都表示一个部门的ID及其名称。
(1)编写SQL查询以查找每个部门中薪资最高的员工。按 任意顺序 返回结果表。
(2)公司的主管们感兴趣的是公司每个部门中谁赚的钱最多。一个部门的 高收入者 是指一个员工的工资在该部门的 不同 工资中 排名前三 。编写一个SQL查询,找出每个部门中 收入高的员工 。以 任意顺序 返回结果表。
(1)
select d.name Department,e.name Employee,e.salary Salary
from Employee e
left join Department d on e.departmentId=d.id
where (e.departmentId,e.salary) in
(select ee.departmentId,max(ee.salary)
from Employee ee group by ee.departmentId)
(2)
SELECT d.name Department,e1.name Employee,e1.Salary Salary
FROM Employee AS e1 left join Department d on e1.DepartmentId=d.id
WHERE 3 >
(SELECT count(DISTINCT e2.Salary)
FROM Employee AS e2
WHERE e1.Salary < e2.Salary AND e1.DepartmentId = e2.DepartmentId)
2.表:Logs
+-------------+---------+
| Column Name | Type |
+-------------+---------+
| id | int |
| num | varchar |
+-------------+---------+
id 是这个表的主键。
编写一个 SQL 查询,查找所有至少连续出现三次的数字。
返回的结果表中的数据可以按 任意顺序 排列。
select distinct(num) "ConsecutiveNums"
from (
select
num,(row_number() over(order by id )-
row_number() over(partition by num order by id)) rank_
from Logs
) tmp
group by rank_,num
having count(rank_)>=3;