从表postgres中获取列中具有第二个最大值的行

时间:2014-12-17 09:03:30

标签: sql postgresql max greatest-n-per-group

我的桌子是

 emp_id | emp_name |  emp_doj   |    emp_desg     |  pay   | manager_id
--------+----------+------------+-----------------+--------+------------
      3 | John     | 2008-12-20 | MTS             |  93750 |          3
      5 | manoj    | 2014-08-10 | Project Trainee | 200000 |          3
      6 | kumar    | 2014-09-12 | Project Trainee |  15000 |          3
      2 | Sree     | 2014-09-12 | ZU              | 150000 |          3

我想从这张表中得到完整的一行,哪一行的薪水是第二高的。也就是说,我想在这里得到sree的详细信息....

2 个答案:

答案 0 :(得分:4)

试试这个:

select max(pay) from table_name where pay NOT IN(select max(pay) from table_name) LIMIT 0,1

这对你有帮助。

答案 1 :(得分:1)

这可以使用窗口函数轻松完成:

select emp_id, emp_name, emp_doj, emp_desg, pay, manager_id
from (
  select emp_id, emp_name, emp_doj, emp_desg, pay, manager_id,
         dense_rank() over (order by pay desc) as rnk
  from employee
) t
where rnk = 2;

如果两名员工的工资相同,则两人均退还。如果您只想返回其中一个,请使用row_number()代替dense_rank()