美文网首页
(LeetCode 615) 平均工资:部门与公司比较

(LeetCode 615) 平均工资:部门与公司比较

作者: lconcise | 来源:发表于2021-06-29 23:25 被阅读0次

    两个表,写一个查询语句,求出在每一个工资发放日,每个部门的平均工资与公司的平均工资的比较结果 (高 / 低 / 相同)

    分析

    1. 不同部门,不同时间的平均工资 (时间、部门 分组, 聚合)
    2. 公司不同时间的平均工资
    3. 比较,高、低、相同

    解题

    1. 时间格式化
    select employee_id,amount,DATE_FORMAT(pay_date,"%Y-%m") as pay_month from salary ;
    
    1. 不同部门,不同时间的平均工资 (时间、部门 分组, 聚合)
    SELECT
        AVG(amount) as avg,a.pay_month,b.department_id
    FROM
        (select employee_id,amount,DATE_FORMAT(pay_date,"%Y-%m") as pay_month from salary) a
        LEFT JOIN employee b ON a.employee_id = b.employee_id   
    GROUP BY  a.pay_month DESC,b.department_id;
    
    1. 公司不同时间的平均值
    select AVG(a.amount) as avg,a.pay_month from (select employee_id,amount,DATE_FORMAT(pay_date,"%Y-%m") as pay_month from salary) a GROUP BY a.pay_month;
    
    1. 比较
    select a.pay_month,a.department_id,
    case
        WHEN a.avg > b.avg then "higher"
        WHEN a.avg = b.avg then "same"
        ELSE "lower"
        END AS comparison
    from (
    SELECT
        AVG(amount) as avg,a.pay_month,b.department_id
    FROM
        (select employee_id,amount,DATE_FORMAT(pay_date,"%Y-%m") as pay_month from salary) a
        LEFT JOIN employee b ON a.employee_id = b.employee_id   
    GROUP BY  a.pay_month DESC,b.department_id) a
    
    left JOIN (select AVG(a.amount) as avg,a.pay_month from (select employee_id,amount,DATE_FORMAT(pay_date,"%Y-%m") as pay_month from salary) a GROUP BY a.pay_month) b
    
    on a.pay_month = b.pay_month
    

    注意点

    1. case when 的用法
    2. DATE_FORMAT(date,format) 函数的使用
    3. GROUP BY 多个列分组

    相关文章

      网友评论

          本文标题:(LeetCode 615) 平均工资:部门与公司比较

          本文链接:https://www.haomeiwen.com/subject/fiwyyltx.html