175.组合两个表
题目:
select a.FirstName,a.LastName,b.City,b.State from Person a left join Address b on a.PersonId = b.PersonId;
属于sql简单难度题目,主要是连表查询,无论person是否有地址信息可以选择左外连接
176.第二高的薪水
题目:
select max(Salary) as SecondHighestSalary from Employee where Salary < (select max(Salary) from Employee);
先查询员工表中薪资最高的值,判断薪资比最大值小的结果集中,取结果集的最大值,即为第二高薪水。
177.第N高的薪水
题目:
CREATE FUNCTION getNthHighestSalary(N IN NUMBER) RETURN NUMBER IS
result NUMBER;
BEGIN
select salary into result from (
select e.salary,dense_rank() over(order by e.salary desc) nth from employee e
) ee where ee.nth = N;
RETURN result;
END;
或
select nvl(salary,null) into result --NVL()函数可以解决salary不存在的情况
from
(select salary ,rownum as num
from
(select distinct salary from employee order by salary desc) --去除重复值,倒序排列
WHERE ROWNUM<=N --缩小查询结果,增加性能
) --子查询的方式,给rownum定义一个别名num,记录下来查询结果
where num = N;
RETURN result;
这道开始没有写出来,后来 百度一下,个人比较可以接受dense_rank函数这种,用起来比较简便。
看了下这篇博客比较
Oracle中row_number()、rank()、dense_rank() 的区别
dense_rank函数介绍