显示经理姓名和在员工表中报告他的员工数量

时间:2014-07-08 08:13:11

标签: oracle

我想显示manager_name和在employees表中报告他的员工数量。我想根据计数对数据进行排序IE最多向员工报告的员工应该是第一位。

我试图写自我加入,但我无法得到输出。

EMPLOYEE_ID FIRST_NAME MANAGER_ID SALARY HIRE_DATE


    198 Donald                      124       2600 21-JUN-99
    199 Douglas                     124       2600 13-JAN-00
    200 Jennifer                    101       4400 17-SEP-87
    201 Michael                     100      13000 17-FEB-96
    202 Pat                         201       6000 17-AUG-97
    203 Susan                       101       6500 07-JUN-94
    204 Hermann                     101      10000 07-JUN-94
    205 Shelley                     101      12000 07-JUN-94
    206 William                     205       8300 07-JUN-94
    100 Steven                               24000 17-JUN-87
    101 Neena                       100      17000 21-SEP-89

表名是员工,我也希望看到名字

4 个答案:

答案 0 :(得分:4)

您可以使用汇总功能 COUNT ORDER BY 子句 你没有提到表名,假设表名为EMPLOYEES,下面的查询可以帮助你。

SELECT MANAGER_ID, COUNT(EMPLOYEE_ID) as EMP_COUNT 
  FROM EMPLOYEES  
 GROUP BY MANAGER_ID 
 ORDER BY EMP_COUNT DESC;

此处EMP_COUNT是列别名。如果您不想要任何列别名,只需使用下面的查询即可。

SELECT MANAGER_ID, COUNT(EMPLOYEE_ID) 
  FROM EMPLOYEES 
 GROUP BY MANAGER_ID 
 ORDER BY COUNT(EMPLOYEE_ID) DESC;

如果您想按升序排序而不是DESC,则可以使用ASC。

答案 1 :(得分:0)

我们可以使用分析函数获得此输出:

SELECT E.EMPID,E.EMPNAME as "Manager Name",M.EMPNAME AS "Employee Name",count(*) over(partition by e.empid) reportee_count
 from empmgid m,empmgid e where M.MAGID=e.EMPID order by reportee_count desc;

答案 2 :(得分:0)

请使用以下SQL查询:

SELECT
    e.empno,
    e.ename,
    e1.empcnt
FROM
    emp e,
    (
        SELECT
            mgr,
            COUNT(*) empcnt
        FROM
            emp
        GROUP BY
            mgr
    ) e1
WHERE
    e.empno = e1.mgr;

答案 3 :(得分:0)

-- Restricting which manager is having two employees working under them
-----------------------------------------------------------------------

SELECT E1.* FROM
(
SELECT E1.EMPNO,E1.ENAME AS EMPLOYE,
M1.ENAME AS MANAGERS,
COUNT(*)
OVER
(
PARTITION BY E1.EMPNO
) EMPCNT
FROM EMP E1,EMP M1
WHERE M1.MGR=E1.EMPNO
) E1
WHERE EMPCNT = 2;