查询每个职位是否带薪水最低的雇员的身份证

问题描述 投票:1回答:2

需要在Oracle SQL中创建一个查询,该查询针对每个作业,返回具有最低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); 

您能帮我吗?

sql oracle group-by greatest-n-per-group
2个回答
1
投票

如果只想再增加一列,则可以使用keep语法:

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

对于更多列,您可以使用窗口功能:

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

0
投票

如果我理解正确,您想显示每个给定职业的最低工资员工的数据,对吗?在这种情况下,我们可以使用GROUP BY来按职业划分[[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
这应该给您每个雇员在每个受人尊敬的职业中最低的工资。

正在工作的小提琴here

© www.soinside.com 2019 - 2024. All rights reserved.