0

我是甲骨文的新手。我必须firstname使用子查询从表中获取记录的第二个最高薪水。我试过以下查询:

select max(salary) 
 from employees 
where salary > (select max(salary) 
                  from empoloyees);

此查询用于从表中获取第二个最高薪水。现在我必须得到firstname第二个工资记录。

firstname   salary
-------------------
mani         45666 
vijay        50000 
sanjay       65000
4

3 回答 3

0
SELECT firstname, salary FROM 
    (SELECT * FROM employees ORDER BY salary DESC)
    WHERE rownum = 2;

内部按从大到小的顺序SELECT对表格进行排序(因此)。salaryDESC

外部从排序表SELECT的第 2 行(包含第二高)中获取您想要的两个字段。salary

于 2013-01-05T05:33:53.230 回答
0

试试这个

SELECT * FROM EMP WHERE SAL >=(SELECT MAX (SAL) FROM EMP WHERE SAL < (SELECT MAX(SAL) FROM EMP WHERE SAL <(SELECT MAX(SAL) FROM EMP))) AND ROWNUM < 4 ORDER BY SAL
于 2013-06-09T10:13:10.910 回答
0

您可以为此使用 dense_rank。

select  firstname, salary
  from (select /*+ first_rows(2) */ firstname, salary, 
               dense_rank() Over (order by salary desc) r
          from employees)
 where r = 2;

first_rows 提示是为了帮助它使用索引(关于(薪水)或(薪水,名字)的索引。如果 2 人碰巧分享相同的薪水,这可能会返回 > 1 行(您可以添加and rownum = 1以随机选择一个) )。

于 2013-01-06T21:33:38.973 回答