当前位置: 首页 > article >正文

MySQL练手题--公司和部门平均工资比较(困难)

一、准备工作

Create table If Not Exists Salary (id int, employee_id int, amount int, pay_date date);
Create table If Not Exists Employee (employee_id int, department_id int);
Truncate table Salary;
insert into Salary (id, employee_id, amount, pay_date) values ('1', '1', '9000', '2017/03/31');
insert into Salary (id, employee_id, amount, pay_date) values ('2', '2', '6000', '2017/03/31');
insert into Salary (id, employee_id, amount, pay_date) values ('3', '3', '10000', '2017/03/31');
insert into Salary (id, employee_id, amount, pay_date) values ('4', '1', '7000', '2017/02/28');
insert into Salary (id, employee_id, amount, pay_date) values ('5', '2', '6000', '2017/02/28');
insert into Salary (id, employee_id, amount, pay_date) values ('6', '3', '8000', '2017/02/28');
Truncate table Employee;
insert into Employee (employee_id, department_id) values ('1', '1');
insert into Employee (employee_id, department_id) values ('2', '2');
insert into Employee (employee_id, department_id) values ('3', '2');

# 找出各个部门员工的平均薪资与公司平均薪资之间的比较结果(更高 / 更低 / 相同)。

输入:

输出: 

二、分析

 

三、实现 

with t as (
    select date_format(pay_date,'%Y-%m') pay_month,avg(amount) avg_amount
    from salary
    group by date_format(pay_date,'%Y-%m')   -- 公司每月平均工资
), t1 as (
    select date_format(pay_date,'%Y-%m') pay_month,department_id,avg(amount) avg_damount
    from employee e , salary s
    where e.employee_id = s.employee_id
    group by date_format(pay_date,'%Y-%m') , department_id  -- 部门每月平均工资
)
select
    t.pay_month,
    department_id,
    case
        when t1.avg_damount > t.avg_amount then 'higher'  -- 部门高于公司
        when t1.avg_damount < t.avg_amount then 'lower'   -- 部门低于公司
        else 'same'                                       -- 部门与公司相等
    end comparison
from t ,t1 where t.pay_month = t1.pay_month;

四、总结

此题有坑,需要注意给的数据是两个月的记录需要分月份去分析,公司平均的公司也是分为两个月去考虑,部门的平均工资需要对月份和部门分组求出每个部门每个月的平均工资,最后拿着部门平均工资和公司平均工资做一个case when...then 条件最后部门比公司高的输出higher,低的输出lower,相同的输出same;


http://www.kler.cn/a/305741.html

相关文章:

  • 7天用Go从零实现分布式缓存GeeCache(学习)(3)
  • F5全新报告揭示AI时代API安全面临严峻挑战
  • 重学SpringBoot3-整合 Elasticsearch 8.x (三)使用Repository
  • 数据分析——学习框架
  • 计算机新手练级攻略——善用搜索引擎
  • day12:版本控制器
  • 【前端UI框架】VUE ElementUI 离线文档 可不联网打开
  • 后端面试经典问题汇总
  • MATLAB中的函数编写有哪些最佳实践
  • Python(PyTorch)和MATLAB及Rust和C++结构相似度指数测量导图
  • JS的事件以及常见事件的绑定
  • Win电脑使用Ollama与Open Web UI搭建本地大语言模型运行工具
  • Go 中 Gin 框架的使用指南
  • GIS 中的 3D 分析
  • 数据结构基础详解:哈希表【C语言代码实践篇】开放地址法__拉链法_哈希表的创建_增删查操作详解
  • 详解c++多态---上
  • 移动应用开发与测试赛题2
  • 将 YOLOv10 模型从 PyTorch 转换为 ONNX
  • 前端开发的单例设计模式
  • Leetcode面试经典150题-202.快乐数
  • 人工智能时代,程序员如何保持核心竞争力?
  • CSP-J 计算机网络
  • CSS 圆角渐变边框
  • Linux软件安装
  • 虚幻5|使用F插值到,击打敌人使UI血条缓慢缩减|小知识(3)
  • 利用 Vue.js 自定义指令实现权限控制:问题解析与最佳实践20240912