SQL今日一题(5):一题多解

本文是SQL今日一题的第5篇,介绍如何查询员工入职时的薪水,提供了两种方法:一种利用表连接,另一种通过GROUP BY与HAVING子句。文章详细解释了每种方法的思路,并强调了分组与过滤的区别。

这是SQL今日一题的第5篇

题目描述

查找所有员工入职时候的薪水情况,给出emp_no以及salary, 并按照emp_no进行逆序(请注意,一个员工可能有多次涨薪的情况)

这题要用到employees表和salaries表,两个表以emp_no为公共字段。

 


 

方法1

# 左连接(也可以换成inner join)
select e.emp_no,s.salary from employees e 
left join salaries s
on e.emp_no = s.emp_no 
where e.hire_date = s.from_date order by e.emp_no desc

# where连接
select e.emp_no,s.salary from employees e,salaries s
where e.emp_no = s.emp_no 
and e.hire_date = s.from_date order by e.emp_no desc

1、首先要明确,employees表中的emp_no肯定是唯一的,即一个员工对应一条信息,但salaries表中的emp_no可能不唯一,因为员工存在多次涨薪的情况。

2、然后要思考入职时的薪水怎么取,对了,只要将salaries表的from_date等于employees表的hire_date就可以了,再将两个表连接(左连接或内连接或where都可以)

3、注意还要按emp_no降序排列

方法2

select emp_no,salary from salaries
group by emp_no
having from_date = min(from_date)
order by emp_no desc

这是一种不需要表连接的操作
1、入职时的薪水一定是salaries表中一个员工的from_date最小的日期对应的薪水,所以先按照emp_no分组

2、再用having做分组后的条件限制,让from_date等于from_date里的最小值

3、最后再对emp_no降序排列即可

知识点
group by 子句:

  • group by子句用来创建分组,
  • group by子句要写在where后,order by 前

having 过滤分组:

  • having过滤的是分组,where过滤的是行
  • having在分组后过滤,where在分组前过滤

猜你喜欢:
数据分析应关注AARRR模型的哪些指标

泰坦尼克号数据分析

深入浅出数据分析

《吊打分析师》实战—我要租个好房

为什么要学统计学:赤裸裸的统计学

成为数据分析师的第三年,我写了10W字

@ 作者:可乐
@ 公众号/知乎专栏/头条/简书:可乐的数据分析之路
@加个人微信:data_cola,备注:进群,拉你入 可乐的数据分析群 和各行各业的小伙伴交流探讨数据分析相关内容

微信公众号

微信公众号

个人微信号

个人微信号

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

进击的可乐!

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

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

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

打赏作者

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

抵扣说明:

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

余额充值