首页 > 数据库 >力扣615(MySQL)-平均工资:部门与公司比较(困难)

力扣615(MySQL)-平均工资:部门与公司比较(困难)

时间:2023-04-04 23:22:07浏览次数:44  
标签:pay 615 力扣 date MySQL employee avg id

题目:

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

表: salary

 employee_id 字段是表 employee 中 employee_id 字段的外键。

 对于如上样例数据,结果为:

解释

在三月,公司的平均工资是 (9000+6000+10000)/3 = 8333.33…

由于部门 ‘1’ 里只有一个 employee_id 为 ‘1’ 的员工,所以部门 ‘1’ 的平均工资就是此人的工资 9000 。因为 9000 > 8333.33 ,所以比较结果是 ‘higher’。

第二个部门的平均工资为 employee_id 为 ‘2’ 和 ‘3’ 两个人的平均工资,为 (6000+10000)/2=8000 。因为 8000 < 8333.33 ,所以比较结果是 ‘lower’ 。

在二月用同样的公式求平均工资并比较,比较结果为 ‘same’ ,因为部门 ‘1’ 和部门 ‘2’ 的平均工资与公司的平均工资相同,都是 7000 。
解题思路:

建表语句:

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

 利用DATE_FORMAT() 、AVG() 、内连接JOIN ON 和 流程控制函数CASE...WHEN

①查询公司每月份的平均工资;

1 select date_format(pay_date, '%Y-%m') AS pay_month,avg(amount) as company_avg
2 from salary_615 
3 group by pay_date

 ②查询每个部门的平均薪资;

1 select date_format(pay_date, '%Y-%m') AS pay_month,b.department_id,avg(amount) as employee_avg
2 from salary_615 a
3 join employee_615 b
4 on a.employee_id = b.employee_id
5 group by pay_month,b.department_id;

 ③将上面两个查询出来的数据作为两个临时表通过pay_month进行连接,然后对薪资进行判断。

 1 select 
 2    temp1.pay_month,
 3    temp2.department_id,
 4    case
 5       when employee_avg > company_avg then "higher"
 6       when employee_avg < company_avg then "lower"
 7       else 'same'
 8       end as comparision
 9 from (
10     select 
11       date_format(pay_date, '%Y-%m') AS pay_month,
12       avg(amount) as company_avg
13     from salary_615 
14     group by pay_date
15 ) as temp1
16 join (
17     select 
18       date_format(pay_date, '%Y-%m') AS pay_month,
19       b.department_id,
20       avg(amount) as employee_avg
21    from salary_615 a
22    join employee_615 b
23    on a.employee_id = b.employee_id
24    group by pay_month,b.department_id
25 )as temp2
26 on temp1.pay_month = temp2.pay_month
27 order by temp1.pay_month desc,temp2.department_id;

小知识:

①DATE_FORMAT() 函数用于以不同的格式显示日期/时间数据

例如:

DATE_FORMAT('2022/9/2','%Y年%m月%d日')    #2022年09月02日

②AVG() 函数返回数值列的平均值

③流程控制函数CASE...WHEN:

语法一:

case 要判断的字段或表达式
when 常量1 then 要显示的值1或语句1
when 常量2 then 要显示的值2或语句2
...
else 要显示的值n或语句n
end

例如:

-- 大类名是果菜的售价涨价10%,肉涨价20%,副食涨价5%
SELECT `商品名称`,`进价`,`售价`,
CASE 大类编码
   WHEN 01 THEN 售价*1.1
   WHEN 02 THEN 售价*1.2
   WHEN 03 THEN 售价*1.05
   ELSE 售价
   END AS 新售价
 FROM `商品表`;

语法二:

case
when 条件1 then 要显示的值1或语句1
when 条件2 then 要显示的值2或语句2
...
else 要显示的值n或语句n
end

例如:

SELECT `店号`,`商品编码`,`销售数量`,
CASE 
   WHEN `销售数量` > 250 THEN '优'
     WHEN `销售数量` > 150 THEN '良'
     WHEN `销售数量` > 100 THEN '中'
     ELSE '差'
   END AS 评级
 FROM `销售表`;

 

标签:pay,615,力扣,date,MySQL,employee,avg,id
From: https://www.cnblogs.com/liu-myu/p/17288144.html

相关文章

  • 【MySQL】MySQL番外01 — MySQL单表多字段模糊查询解决方法
    MySQL单表多字段模糊查询解决方法背景:在项目中经常遇到查询接口需要实现单表中对多字段进行多个关键字的模糊查询,但这个关键字并不一定只存在于某个字段。例如现有一张employees表,其中有last_name,first_name两个字段,分别记录一条用户的姓和名。根据用户输入的查询请求,在这两个......
  • 力扣614(MySQL)-二级关注者(中等)
    题目:在facebook中,表follow会有2个字段:followee,follower,分别表示被关注者和关注者。请写一个sql查询语句,对每一个关注者,查询关注他的关注者的数目。比方说: 应该输出: 解释:B和D都在在follower字段中出现,作为被关注者,B被C和D关注,D被E关注。A不在......
  • mysql数据库安装
    参考连接1、超级详细的mysql数据库安装指南2、MySQL安装过程中,出现CheckRequirements缺少C++动态库即MicrosoftVisualC++2013Redistributable问题二、安装步骤(基本和第一个参考链接相同,下面是差异的地方)1、检查安装要求,不可以点击Next,点击Execute会出现错误。提示没有......
  • 【MySQL】MySQL基础03 — SQL学习 — DQL — 条件查询
    SQL学习—DQL—条件查询DQL语言学习数据查询语言(DataQueryLanguage),关键字select使用DQL前,先输入USE库名;2.条件查询语法:select`查询列表`from表名where筛选条件;分类:/*分类: 一、按条件表达式筛选 条件运算符:><=!=(<>)>=<= 二、按......
  • 【MySQL】MySQL基础 — SQL学习 — DQL — 基础查询
    SQL学习—DQL—基础查询DQL语言学习数据查询语言(DataQueryLanguage),关键字select使用DQL前,先输入USE库名;1.基础查询1.1查询字段#基础查询/*语法:select`查询列表`from表名;#`查询列表`,`着重号表明是字段,可加可不加,当关键字和字段名重叠,用`着重号区......
  • Qt6编译MySQL驱动最简单方法
    最近qt发布最新lts版本qt6.5,就想下来试试新功能。qt版本6.5.0,安装目录E:\Qt\6.5.0mysql版本8.0,安装目录C:\MySQL_Server_8.0,或者直接下连接器解压也可以:MySQL::DownloadMySQLConnector/C(ArchivedVersions)需要额外安装qt的sources源组件,忘了也没关系,在cmd下进入包含Main......
  • MYSQL-Explain详解
    --实际SQL,查找用户名为Jefabc的员工select*fromempwherename='Jefabc';--查看SQL是否使用索引,前面加上explain即可explainselect*fromempwherename='Jefabc';expain出来的信息有10列,分别是id、select_type、table、type、possible_keys、key、key_len、ref......
  • mysql5.7 启用SSL
    服务器端启动配置查看默认数据目录#ls-ldata/total122944-rw-r-----1mysqlmysql56Apr417:21auto.cnf-rw-------1mysqlmysql1676Apr417:21ca-key.pem-rw-r--r--1mysqlmysql1112Apr417:21ca.pem-rw-r--r--1mysqlmysql1......
  • MySQL笔记
    MySQL概述数据库相关概念名称全称简称数据库存储数据的仓库,数据是有组织的进行存储DataBase(DB)数据库管理系统操纵和管理数据库的大型软件DataBaseManagementSystem(DBMS)SQL操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准Structured......
  • Python MySQL UsingGuide
    1.MySQLInstall2.MySQLBasicalTestDemonstrationimportpymysql.cursorsimporttime#ConnecttothedatabaseT1=time.time()connection=pymysql.connect(host='localhost',user='root',......