SQL算法题

题目来源于牛客SQL题目

1.找出所有员工当前薪水情况

员工薪水表salaries如下所示:

emp_nosalaryfrom_dateto_date
10001725272002-06-229999-01-01
10002725272001-08-029999-01-01
10003433112001-12-019999-01-01

需求:找出所有员工的salary情况,相同的薪水只显示一次,并按照逆序显示,

以上例子输出如下:

salary
72527
43311

题目分析

员工薪资可能会有相同值,需要对数据进行去重排序操作,在本题目中group by操作与distinct操作均可,这里我们采用group by操作进行去重并进行降序操作

代码实现

select 
    salary 
from 
    salaries 
where 
    to_date = '9999-01-01'
group by salary 
order by salary desc 

2.查找当前薪水详情以及部门编号dept_no

有一个全部员工的薪水表salaries简况如下:

emp_nosalaryfrom_dateto_date
10001889582002-06-229999-01-01
10002725272001-08-029999-01-01
10003433112001-12-019999-01-01

 有一个各个部门的领导表dept_manager简况如下:

dept_noemp_noto_date
d001100019999-01-01
d002100039999-01-01

需求:查找各个部门当前领导的薪水详情以及其对应部门编号dept_no,

输出结果以salaries.emp_no升序排序,并且请注意输出结果里面dept_no列是最后一列,以上例子输出如下:

emp_nosalaryfrom_dateto_datedept_no
10001889582002-06-229999-01-01d001
10003433112001-12-019999-01-01d002

题目分析

输出表格中含有表格1与表格2的内容,可以选择将两个表格相连接,连接数据为上述需求dept_no,注意输出表格数据列顺序.

代码实现

select 
    s.*,
    d.dept_no
from 
    salaries as s 
    inner join dept_manager as on s.emp_no=d.emp_no
where 
    s.to_date='9999-01-01' 
and d.to_date='9999-01-01'

3.查找所有员工入职的薪水情况

这里有两张表分别是employees与salaries

CREATE TABLE `employees` (
    `emp_no` int(11) NOT NULL,
    `birth_date` date NOT NULL,
    `first_name` varchar(14) NOT NULL,
    `last_name` varchar(16) NOT NULL,
    `gender` char(1) NOT NULL,
    `hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`));


CREATE TABLE `salaries` (
    `emp_no` int(11) NOT NULL,
    `salary` int(11) NOT NULL,
    `from_date` date NOT NULL,
    `to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`from_date`));

 输出表格如下:

emp_nosalary
1001125828
1000160117

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

题目分析

       最终输出表所含信息与表employees和salaries信息, 这里不选用两表相连,要求查询员工入职薪水情况,所以salaries.from_date 和 employees.hire_date 的值相等,因此有限制条件 e.hire_date = s.from_date,一位员工的salar不只有一个值,这里限制 e.emp_no = s.emp_no.

代码实现

SELECT
    e.emp_no,
    s.salary
FROM
    employees AS e,
    salaries AS s
WHERE
    e.emp_no = s.emp_no
    AND e.hire_date = s.from_date
ORDER BY
    e.emp_no DESC

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值