我想找寻每组最低薪水的人。 这是员工表:
DEPARTMENT_ID FIRST_NAME SALARY
------------- -------------------- ----------
90 Steven 24000
90 Neena 17000
90 Lex 17000
60 Alexander 9000
60 Bruce 6000
60 Diana 4200
50 Kevin 5800
50 Trenna 3500
50 Curtis 3100
50 Randall 2600
50 Peter 2500
例如,我想检索[90,60,50]组中有最低工资的人[Lex,Diana,Peter],该怎么做?
平台:win10
SQL版本:sqldeveloper 18.1
答案 0 :(得分:3)
最好的方法是使用row_number()
:
select t.*
from (select t.*, row_number() over (partition by dept_id order by sal) as seq
from table t
) t
where seq = 1;
但是,如果row_number()
不能解决问题,请改用相关子查询:
select t.*
from table t
where sal = (select min(t1.sal)
from table t1
where t1.dept_id = t.dept_id
);
如果同一部门与其他员工的最低工资相同,结果将有所不同,第一个版本将为您每个部门只提供一行,而第二个版本将为您每个部门提供一个或多个行。