【发布时间】:2019-10-03 06:50:11
【问题描述】:
我有一个有效的查询,但我怀疑我这样做效率低下。有没有更优雅的方法来查找每个部门的最高薪水以及获得最高薪水的员工?
我正在做一个 cte 来查找每个部门 ID 的最高工资,然后通过匹配工资和部门 ID 将其与员工数据连接起来。我有下面的代码来构建/填充表格和最后的查询。
CREATE TABLE employee (
emplid SERIAL PRIMARY KEY,
name VARCHAR NOT NULL,
salary FLOAT NOT NULL,
depid INTEGER
);
INSERT INTO employee (name, salary, depid)
VALUES
('Chris',23456.99,1),
('Bob',98756.34,1),
('Malin',34567.22,2),
('Lisa',34967.73,2),
('Deepak',88582.22,3),
('Chester',99487.41,3);
CREATE TABLE department (
depid SERIAL PRIMARY KEY,
deptname VARCHAR NOT NULL
);
INSERT INTO department (deptname)
VALUES
('Engineering'),
('Sales'),
('Marketing');
--top salary by department
WITH cte AS (
SELECT d.depid, deptname, MAX(salary) AS maxsal
FROM employee e
JOIN department d ON d.depid = e.depid
GROUP BY d.depid, deptname
)
SELECT cte.deptname, e.name, cte.maxsal
FROM cte
JOIN employee e ON cte.depid = e.depid
AND e.salary = cte.maxsal
ORDER BY maxsal DESC;
这是目标结果:
“营销”“切斯特”“99487.41” “工程”“鲍勃”“98756.34” “销售”“丽莎”“34967.73”
【问题讨论】:
标签: postgresql