打卡第2天 -- 3S2A1P : 三道sql,2道算法,1道简答

打卡第2天 -- 3S2A1P : 三道sql,2道算法,1道简答

sql-1

https://www.nowcoder.com/practice/a32669eb1d1740e785f105fa22741d5c?tpId=82&&tqId=29767&rp=1&ru=/ta/sql&qru=/ta/sql/question-ranking

查找employees表所有emp_no为奇数,且last_name不为Mary(注意大小写)的员工信息,并按照hire_date逆序排列(题目不能使用mod函数)

拆分

​ 判断为奇数: &1 、 %2==1

​ 不为:!= 、<>

​ 排序: order by desc asc

select * from employees where emp_no & 1 and last_name<>'Mary' order by hire_date desc

sql-2

https://www.nowcoder.com/practice/c8652e9e5a354b879e2a244200f1eaae?tpId=82&&tqId=29768&rp=1&ru=/ta/sql&qru=/ta/sql/question-ranking

统计出当前(titles.to_date='9999-01-01')各个title类型对应的员工当前(salaries.to_date='9999-01-01')薪水对应的平均工资。结果给出title以及平均工资avg

拆分

​ 分组:group by

​ 平均:avg()

select title,avg(salary) from (salaries s inner join titles t on s.emp_no==t.emp_no and t.to_date=='9999-01-01' and s.to_date='9999-01-01') st group by title 

sql-3

https://www.nowcoder.com/practice/8d2c290cc4e24403b98ca82ce45d04db?tpId=82&&tqId=29769&rp=1&ru=/ta/sql&qru=/ta/sql/question-ranking

获取当前(to_date='9999-01-01')薪水第二多的员工的emp_no以及其对应的薪水salary

拆分

​ 第二多:方法1: dense_rank() over()

​ 方法2:去重(分组)排序 ,找到第二个

​ 方法3:先过滤掉最大值,再求最大值

-- 方法1:开窗函数
select emp_no,salary from (select emp_no,salary,dense_rank() over(order by salary desc)as rk from salaries) t where t.rk=2
-- 方法2:使用去重排序找第二个
select emp_no,salary from salaries s where s.salary =(select salary from salaries group by salary order by salary desc limit 1,1)

你可能感兴趣的:(打卡第2天 -- 3S2A1P : 三道sql,2道算法,1道简答)