在sql

时间:2018-10-15 13:55:26

标签: sql

我想找寻每组最低薪水的人。 这是员工表:

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

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
            );

如果同一部门与其他员工的最低工资相同,结果将有所不同,第一个版本将为您每个部门只提供一行,而第二个版本将为您每个部门提供一个或多个行。