首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否根据重复的列值限制MySQL选择?

是否根据重复的列值限制MySQL选择?
EN

Stack Overflow用户
提问于 2020-03-16 03:53:01
回答 1查看 47关注 0票数 2

考虑一下这个模式:

代码语言:javascript
复制
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)
);

我想收集那些根据每个部门的平均年薪排名在第三到第五位之间的员工,但我有点困惑。经过一番搜索,我找不到一个适合我的解决方案。

这是我目前所拥有的:

代码语言:javascript
复制
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不是问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-16 07:27:49

在MySQL 8.0中,一种选择是使用排名函数;这需要将现有查询转换为子查询:

代码语言:javascript
复制
select *
from (
    select 
        e.*, 
        s.avg_salary, 
        row_number() over(partition by e.id_department order by s.avg_salary desc) rn
    from employee e
    inner join (
        select id_employee, sum(salary) / count(distinct(year)) as avg_salary 
        from salary 
        group by id_employee
    ) s on s.employee.id = e.id
) t
where rn between 3 and 5
order by id_department, avg_salary;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60697017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档