查询每个职位带上薪水最低的员工的 id

query that for each position bring the id of the employee with the lowest salary

需要在 Oracle SQL 中创建一个查询,对于每个 JOB,return 具有最低 SALARY 的员工 ID。

我这样试过,但它给我带来了所有的薪水和ID:

SELECT JOB, MIN(SAL) FROM EMP
    GROUP BY EMPNO, JOB;

所以它只给我带来了最低的薪水:

SELECT JOB, SAL 
    FROM SCOTT_EMP 
    WHERE SAL = (SELECT MIN(SAL) FROM EMP); 

你能帮帮我吗?

如果您只想多一列,可以使用 keep 语法:

select
    job,
    min(sal),
    min(id) keep(dense_rank first order by sal) id
from emp
group by job

如需更多列,您可以使用window函数:

select *
from (
    select e.*, rank() over(partition by job order by sal) rn
    from emp e
) e
where rn = 1

如果我没理解错的话,你想显示每个给定职业的最低工资的员工数据,对吗?在这种情况下,我们可以使用 GROUP BY 按 我们的职业 分组,并使用 ORDER BY 按我们的薪水排序。

示例数据示例:

CREATE TABLE tbl_employees(id int(11), name varchar(100), occupation varchar(100));
CREATE TABLE tbl_salary(id int(11), salary decimal);

INSERT INTO tbl_employees VALUES(1, "John Doe", "Accountant");
INSERT INTO tbl_employees VALUES(2, "Christopher Stark", "Accountant");
INSERT INTO tbl_employees VALUES(3, "Arnold  Sanders", "Accountant");
INSERT INTO tbl_employees VALUES(4, "Jane Doe", "Marketer");
INSERT INTO tbl_employees VALUES(5, "Christina Lavine", "Marketer");
INSERT INTO tbl_employees VALUES(6, "Penny Lane", "Marketer");
INSERT INTO tbl_employees VALUES(7, "George Franklin", "Customer Support");

INSERT INTO tbl_employees VALUES(8, "Kent Brockmann", "Customer Support");
INSERT INTO tbl_employees VALUES(9, "Richard Felenski", "Customer Support");
INSERT INTO tbl_employees VALUES(10, "Patrick Neil", "Technical Support");
INSERT INTO tbl_employees VALUES(11, "Paul Richards", "Technical Support");
INSERT INTO tbl_employees VALUES(12, "Tom Harris", "Technical Support");
INSERT INTO tbl_employees VALUES(13, "Rebecca Moore", "Project Manager");
INSERT INTO tbl_employees VALUES(14, "Laura Cross", "Project Manager");
INSERT INTO tbl_employees VALUES(15, "Denise McIntyre", "Project Manager");

INSERT INTO tbl_salary VALUES(1, 100.00);
INSERT INTO tbl_salary VALUES(2, 150.00);
INSERT INTO tbl_salary VALUES(3, 300.00);
INSERT INTO tbl_salary VALUES(4, 110.00);
INSERT INTO tbl_salary VALUES(5, 120.00);
INSERT INTO tbl_salary VALUES(6, 235.00);
INSERT INTO tbl_salary VALUES(7, 240.00);
INSERT INTO tbl_salary VALUES(8, 200.00);
INSERT INTO tbl_salary VALUES(9, 160.00);
INSERT INTO tbl_salary VALUES(10, 230.00);
INSERT INTO tbl_salary VALUES(11, 320.00);
INSERT INTO tbl_salary VALUES(12, 150.00);
INSERT INTO tbl_salary VALUES(13, 168.00);
INSERT INTO tbl_salary VALUES(14, 175.00);
INSERT INTO tbl_salary VALUES(15, 350.00);

查询:

SELECT
  tbl_employees.id as emp_id,
  tbl_employees.name as emp_name,
  tbl_employees.occupation as emp_pos,
  tbl_salary.salary as emp_salary
FROM
  tbl_employees
INNER JOIN
  tbl_salary ON tbl_employees.id = tbl_salary.id
GROUP BY
  tbl_employees.occupation
ORDER BY
  tbl_salary.salary DESC

这应该给你每个受人尊敬的职业中薪水最低的每个员工。

输出:

工作 fiddle here.