牛客SQL(06-08)

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

解法一 使用group by分组+having min()过滤

select emp_no , salary from salaries
group by emp_no
having min(from_date)
order by emp_no desc;
注:一个员工有多次涨薪,也就是有多个from_date,按员工编号进行分组,然后使用having对分组后的数据进行过滤,找出最小的时间,即最刚入职时的时间。

解法二 使用内连接,入职日期等于发工资的日期(可找到入职时薪水)。

select e.emp_no,s.salary
from employees e inner join salaries s
on e.emp_no=s.emp_no
where e.hire_date = s.from_date
order by e.emp_no desc;

解法三 并列查询

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;

07 查找薪水变动超过15次的员工号emp_no以及其对应的变动次数t

select emp_no,count() t from salaries
group by emp_no
having t>15;
注:按员工编号分组,然后统计每一个员工的薪水变动次数,并用having进行过滤。

08 找出所有员工当前(to_date=‘9999-01-01’)具体的薪水salary情况,对于相同的薪水只显示一次,并按照逆序显示。

解法一 distinct 去重

select distinct salary
from salaries
where to_date = ‘9999-01-01’
order by salary desc;

解法二 group by 去重

select salary from salaries
where to_date = ‘9999-01-01’
group by salary
order by salary desc;
说明:
对于distinct与group by的使用:
1.当对系统的性能高并且数据量大时使用group by;2.当对系统的性能不高时或者使用数据量少时两者都可;3.尽量使用group by。

distinct 特点:
  1、distinct 只能放在查询字段的最前面
  2、distinct 对后面所有的字段均起作用,即 去重是查询的所有字段完全重复的数据,而不是只对 distinct 后面连接的单个字段重复的数据。
  3、要查询多个字段,但只针对一个字段去重,使用distinct去重的话是无法实现的。group by可以实现。
  group by 特点:
  1、一般与聚类函数使用(如count()/sum()等),也可单独使用。
  2、group by 也对后面所有的字段均起作用,即 去重是查询的所有字段完全重复的数据,而不是只对 group by后面连接的单个字段重复的数据。
  select distinct A,B,C from table1;#distinct只能放在最前面,对3个字段都去重。
  select A,B,C from table1
  group by B;#可只对中间字段去重。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值