0
点赞
收藏
分享

微信扫一扫

LeetCode(数据库)- 查询员工的累计薪水


题目链接:​​点击打开链接​​


题目大意:略。


解题思路:略。


AC 代码

-- 解决方案(1)
select Id, AccMonth as Month, sum(Salary) as Salary
from
(
select a.Id as Id, a.Month as AccMonth, b.Month as Month, b.Salary as Salary
from
(
select Employee.Id as Id, Employee.Month as Month
from Employee, (select Id, max(Month) as Month
from Employee
group by Id) as LastMonth
where Employee.Id = LastMonth.Id and Employee.Month != LastMonth.Month) as a
join Employee as b
on a.Id = b.Id and a.Month - b.Month <= 2 and a.Month - b.Month >= 0
) as acc
group by Id, AccMonth
order by Id, Month desc;

-- 解决方案(2)
SELECT
E1.id,
E1.month,
(IFNULL(E1.salary, 0) + IFNULL(E2.salary, 0) + IFNULL(E3.salary, 0)) AS Salary
FROM
(SELECT
id, MAX(month) AS month
FROM
Employee
GROUP BY id
HAVING COUNT(*) > 1) AS maxmonth
LEFT JOIN
Employee E1 ON (maxmonth.id = E1.id
AND maxmonth.month > E1.month)
LEFT JOIN
Employee E2 ON (E2.id = E1.id
AND E2.month = E1.month - 1)
LEFT JOIN
Employee E3 ON (E3.id = E1.id
AND E3.month = E1.month - 2)
ORDER BY id ASC , month DESC;

-- 解决方案(3)
WITH t1 AS(
SELECT e1.Id Id1, e1.Month Month1, e2.Month Month2, e3.Month Month3, IFNULL(e1.Salary, 0) + IFNULL(e2.Salary, 0) + IFNULL(e3.Salary, 0) Salary
FROM Employee e1
LEFT JOIN Employee e2 ON e1.Id = e2.Id AND e1.Month = e2.Month + 1
LEFT JOIN Employee e3 ON e2.Id = e3.Id AND e2.Month = e3.Month + 1
),

t2 AS(SELECT Id1, Month1, Month2, Month3, Salary, ROW_NUMBER() OVER(PARTITION BY Id1 ORDER BY Id1, IFNULL(Month1, IFNULL(Month2, Month3)) DESC) rk
FROM t1)

SELECT Id1 id, Month1 month, Salary
FROM t2
WHERE rk <> 1


举报

相关推荐

查询所有薪水高于“SMITH”的员工

0 条评论