为每位经理从高到低排列员工人数

时间:2019-07-08 03:38:06

标签: sql oracle

我在这里搜索了有关此类问题的类似问题: 列出每个经理的雇员人数,并向每个经理报告的雇员人数降序排列。

但是我还没有找到解决方案。 我的代码如下。 任何帮助或建议,将不胜感激。 (该问题要求使用排名,但我未在代码中使用rank())

SELECT m.first_name, 
       m.last_name as name, 
       count(e.employee_id) as count
FROM RITDB_employee e
INNER JOIN RITDB_manager m ON e.manager = m.employee_id
GROUP BY m.name
ORDER BY m.count

3 个答案:

答案 0 :(得分:1)

尝试一下:

SELECT m.first_name, 
       m.last_name as name, 
       count(e.employee_id) as count
FROM RITDB_employee e
INNER JOIN RITDB_manager m ON e.manager = m.employee_id
GROUP BY m.name
ORDER BY count(e.employee_id) desc

还有一个小技巧,您最好写下表格的全名以方便检查,而不要给出名称。

答案 1 :(得分:1)

您可以结合使用窗口功能和select 4000/200.00 from dual 。分组后,将对窗口功能进行 评估。另外,您需要在GROUP BY条件中加入first_name last_name

group by

答案 2 :(得分:0)

看起来您步入正轨-唯一缺少的是按照已拥有的雇员数量对经理进行排名。您已经猜到了,rank函数可以完全做到这一点,尽管如果您有联系并且想要确保等级连续,则可能更喜欢使用dense_rank

SELECT   name, cnt, DENSE_RANK() OVER (ORDER BY cnt DESC) AK rank_by_employee_num
FROM     (SELECT     m.first_name || ' ' || m.last_name as name, 
                     COUNT(e.employee_id) AS cnt
          FROM       RITDB_employee e
          INNER JOIN RITDB_manager m ON e.manager = m.employee_id
          GROUP BY   m.first_name || ' ' || m.last_name) t
ORDER BY cnt DESC