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:缺少右括号”的错误。我想看看我是否能解决这个问题。无论如何,谢谢你:)