579. 查询员工的累计薪水

579. 查询员工的累计薪水
  • Employee 表保存了一年内的薪水信息。

  • 请你编写 SQL 语句,对于每个员工,查询他除最近一个月(即最大月)之外,剩下每个月的近三个月的累计薪水(不足三个月也要计算)。

  • 结果请按 Id 升序,然后按 Month 降序显示。

    • 输入:
      
      | Id | Month | Salary |
      |----|-------|--------|
      | 1  | 1     | 20     |
      | 2  | 1     | 20     |
      | 1  | 2     | 30     |
      | 2  | 2     | 30     |
      | 3  | 2     | 40     |
      | 1  | 3     | 40     |
      | 3  | 3     | 60     |
      | 1  | 4     | 60     |
      | 3  | 4     | 70     |
      输出:
      
      | Id | Month | Salary |
      |----|-------|--------|
      | 1  | 3     | 90     |
      | 1  | 2     | 50     |
      | 1  | 1     | 20     |
      | 2  | 1     | 20     |
      | 3  | 3     | 100    |
      | 3  | 2     | 40     |
      
  • 解释

    • 员工 '1' 除去最近一个月(月份 '4'),有三个月的薪水记录:月份 '3' 薪水为 40,月份 '2' 薪水为 30,月份 '1' 薪水为 20。
      
      所以近 3 个月的薪水累计分别为 (40 + 30 + 20) = 90,(30 + 20) = 50 和 20。
      
      | Id | Month | Salary |
      |----|-------|--------|
      | 1  | 3     | 90     |
      | 1  | 2     | 50     |
      | 1  | 1     | 20     |
      员工 '2' 除去最近的一个月(月份 '2')的话,只有月份 '1' 这一个月的薪水记录。
      
      | Id | Month | Salary |
      |----|-------|--------|
      | 2  | 1     | 20     |
      员工 '3' 除去最近一个月(月份 '4')后有两个月,分别为:月份 '3' 薪水为 60 和 月份 '2' 薪水为 40。所以各月的累计情况如下:
      
      | Id | Month | Salary |
      |----|-------|--------|
      | 3  | 3     | 100    |
      | 3  | 2     | 40     |
      
  • 解答

    • 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
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

墨染~残阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值