需要在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);
您能帮我吗?
如果只想再增加一列,则可以使用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
如果我理解正确,您想显示每个给定职业的最低工资员工的数据,对吗?在这种情况下,我们可以使用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。