Sql 将每位经理的员工人数从高到低排列

Sql 将每位经理的员工人数从高到低排列,sql,oracle,Sql,Oracle,我在这里搜索了关于此类问题的类似问题: 列出每位经理的员工人数,并将向每位经理汇报的员工人数按降序排列 但我还没有找到解决我的问题的办法。 我的代码如下。 如有任何帮助或建议,将不胜感激。 (问题要求使用排名,但我在代码中没有使用排名() 看起来你走在正确的轨道上——你唯一缺少的是根据你现有的员工数量对经理进行排名。正如您所猜测的那样,rank函数可以准确地实现这一点,但如果您有联系并希望确保列组是连续的,您可能更喜欢使用densite\u-rank: SELECT name, cnt, D

我在这里搜索了关于此类问题的类似问题: 列出每位经理的员工人数,并将向每位经理汇报的员工人数按降序排列

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


看起来你走在正确的轨道上——你唯一缺少的是根据你现有的员工数量对经理进行排名。正如您所猜测的那样,
rank
函数可以准确地实现这一点,但如果您有联系并希望确保列组是连续的,您可能更喜欢使用
densite\u-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

看起来你走在正确的轨道上——你唯一缺少的是根据你现有的员工数量对经理进行排名。正如您所猜测的那样,
rank
函数可以准确地实现这一点,但如果您有联系并希望确保列组是连续的,您可能更喜欢使用
densite\u-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
试试这个:

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
还有一个小提示,为了便于检查,您最好写下表格的全名,而不是给出名称。

试试以下方法:

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

还有一个小提示,为了便于检查,您最好写下表的全名,而不是给出名称。

您可以将窗口功能和
分组方式组合在一起。分组后将对窗口功能进行评估。此外,您还需要根据
条件将
包括在
分组中:

SELECT m.first_name, 
       m.last_name as name, 
       count(*) as count, 
       dense_rank() over (order by count(*) desc partition by m.first_name, m.last_name) as rnk
FROM RITDB_employee e
  JOIN RITDB_manager m ON e.manager = m.employee_id
GROUP BY m.last_name, m.first_name
ORDER BY count(*) desc

您可以将窗口功能和
分组方式组合在一起。分组后将对窗口功能进行评估。此外,您还需要根据
条件将
包括在
分组中:

SELECT m.first_name, 
       m.last_name as name, 
       count(*) as count, 
       dense_rank() over (order by count(*) desc partition by m.first_name, m.last_name) as rnk
FROM RITDB_employee e
  JOIN RITDB_manager m ON e.manager = m.employee_id
GROUP BY m.last_name, m.first_name
ORDER BY count(*) desc

您的代码中有什么错误?(除了可能通过向订单中添加DESC之外)表的一些示例数据和期望的结果将非常有用。代码中有什么错误?(除了可能通过向订单中添加DESC之外)表格的一些示例数据和期望的结果将非常有用。非常感谢您的帮助。但它给了我“ORA-00907:缺少右括号”的错误。我想看看我是否能解决这个问题。不管怎样谢谢:)非常感谢你的帮助。但它给了我“ORA-00907:缺少右括号”的错误。我想看看我是否能解决这个问题。无论如何,谢谢你:)