显示最受欢迎的经理的雇员?

问题描述 投票:-3回答:3

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS8yRnRBVy5wbmcifQ==” alt =“在此处输入图像描述”>

如何显示最受欢迎的经理的员工?因此,我有了这张桌子,我需要拥有最受欢迎的经理的雇员的名字和姓氏(这里是ID = 124的经理)。

查询应显示名字,姓氏和管理者编号。

我该怎么做?

我想它应该在desc中计算manager_id和顺序,然后将其限制为1,以便只拥有最高经理,并以某种方式显示他的雇员

sql oracle sql-order-by greatest-n-per-group
3个回答
0
投票

如何显示最受欢迎的经理的员工?

如果您运行的是Oracle 12.1或更高版本,则可以使用窗口函数以及行限制子句进行排序:

select 
    e.*,
    m.first_name manager_first_name,
    m.last_name manager_last_name
from employees e
inner join employees m on m.employee_id = e.manager_id
order by count(*) over(partition by e.manager_id) desc
fetch next 1 rows with ties

查询自动联接表以使每个雇员与其经理相关联;然后,我们根据同一经理的雇员数量递减的顺序对结果集进行排序,并根据排名靠前的记录进行过滤,从而允许联系(这仅保留与拥有最多雇员的经理相关的雇员)。


在较早的版本中,一种选择是按经理汇总,并按子查询中的雇员数量对其进行排名,然后使用该值进行过滤:

select 
    e.*,
    m.first_name manager_first_name,
    m.last_name manager_last_name
from employees e
inner join employees m on m.employee_id = e.manager_id
inner join (
    select manager_id, rank() over(order by count(*) desc) rn
    from employees
    group by manager_id, first_name, last_name
) x on x.rn = 1 and x.manager_id = e.manager_id

0
投票

您可以使用解析函数在没有任何自联接的情况下进行操作。用同一位经理对雇员进行计数,然后对每个经理的雇员数从最高到最低进行排名,然后过滤以仅显示排名最高的雇员:

SELECT *
FROM   (
  SELECT e.*,
         RANK() OVER ( ORDER BY num_emps_with_same_manager DESC ) AS rnk
  FROM   (
    SELECT e.*,
           COUNT(*) OVER ( PARTITION BY manager_id ) AS num_emps_with_same_manager
    FROM   employees e
  ) e
)
WHERE rnk = 1

因此,为您测试数据(删除了不必要的列):

CREATE TABLE employees ( employee_id, manager_id ) AS
SELECT 100, NULL FROM DUAL UNION ALL
SELECT 101, 100 FROM DUAL UNION ALL
SELECT 102, 100 FROM DUAL UNION ALL
SELECT 200, 101 FROM DUAL UNION ALL
SELECT 205, 101 FROM DUAL UNION ALL
SELECT 206, 205 FROM DUAL UNION ALL
SELECT 149, 100 FROM DUAL UNION ALL
SELECT 174, 149 FROM DUAL UNION ALL
SELECT 176, 149 FROM DUAL UNION ALL
SELECT 178, 149 FROM DUAL UNION ALL
SELECT 124, 100 FROM DUAL UNION ALL
SELECT 141, 124 FROM DUAL;

查询输出直接雇员数量最多的经理的所有雇员详细信息:

EMPLOYEE_ID | MANAGER_ID | NUM_EMPS_WITH_SAME_MANAGER | RNK----------:| ---------:| -------------------------:| -:149 | 100 | 4 | 1个101 | 100 | 4 | 1个102 | 100 | 4 | 1个124 | 100 | 4 | 1个

db <>小提琴here


-1
投票
SELECT * FROM Employees ORDER BY MANAGER_ID DESC
© www.soinside.com 2019 - 2024. All rights reserved.