【发布时间】:2020-03-15 19:53:00
【问题描述】:
考虑这个架构:
create table Employee(
id integer,
name varchar(100),
position varchar(100),
id_department integer
);
create table Salary(
id_employee integer,
year integer,
month integer,
salary float
);
create table Department(
id integer,
name varchar(100)
);
我想根据每个部门的平均年薪收集排名在第 3 和第 5 位之间的员工,但我有点难过。经过一番搜索,我找不到适合我的解决方案。
这是我目前所拥有的:
SELECT Employee.*, avg_salary
FROM Employee
INNER JOIN (
SELECT id_employee, sum(salary) / count(distinct(year)) as avg_salary
FROM Salary
GROUP BY id_employee
)
AS T on Employee.id = id_employee
ORDER BY Employee.id_department, avg_salary;
这可以让我获得正确排名的员工,但我如何只获得他们部门中排名 3-5 的员工?
我使用的是 MySQL 5.x,但升级到 8.x 不是问题。
【问题讨论】:
-
您是否尝试在查询后附加
LIMIT 2,3以获取第 3 行、第 4 行和第 5 行? -
确实,这是我的第一直觉。但这总共产生 3 行,而不是每个部门 ID 3 行。
-
您使用哪个版本的 MySQL?请edit您的问题。
-
请注意,钱很少是浮动的;这就是发明十进制的原因
-
@O.Jones 很抱歉给您带来不便,补充了缺失的信息。