我在这里搜索了有关此类问题的类似问题: 列出每个经理的雇员人数,并向每个经理报告的雇员人数降序排列。
但是我还没有找到解决方案。 我的代码如下。 任何帮助或建议,将不胜感激。 (该问题要求使用排名,但我未在代码中使用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
答案 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