2012-06-12 13 views
6

Estoy tratando de mostrar el número de empleado de cada empleado que gestiona a otros empleados con el número de personas que maneja con la siguiente tabla llamada emp.COUNT es incorrecto al agrupar?

empno ename job   mgr   hiredate sal  comm  deptno 
----- ------ ---------- ---------- ---------- ------- ------- ------ 
7369 Smith Clerk  7902  1980-12-17 800     20 
7499 Allen Salesman 7698  1981-02-20 1600  300  30 
7521 Ward Salesman 7698  1981-02-22 1250  500  30 
7566 Jones Manager  7839  1981-04-02 2975    20 
7654 Martin Salesman 7698  1981-09-28 1250  1400  30 
7698 Blake Manager  7839  1981-05-01 2850    30 
7782 Clark Manager  7839  1981-06-09 2450    10 
7788 Scott Analyst  7566  1982-12-09 3000    20 
7839 King President    1981-11-17 5000    10 
7844 Turner Salesman 7698  1981-09-08 1500  0   30 
7876 Adams Clerk  7788  1983-01-12 1100    20 
7900 James Clerk  7698  1983-12-03 950     30 
7902 Ford Analyst  7566  1983-12-13 3000    20 
7934 Miller Clerk  7782  1982-01-23 1300 

¿Alguna idea de cómo puedo hacer esto?

He tratado

select empno,count(mgr) from emp group by empno,mgr; 

pero esto devuelve:

empno  count(mgr) 
---------- ---------- 
7369  1 
7499  1 
7521  1 
7566  1 
7654  1 
7698  1 
7782  1 
7788  1 
7839  0 
7844  1 
7876  1 
7900  1 
7902  1 
7934  1 

Muchas gracias por su ayuda.

+1

Puede usted por favor explique un poco más? – TechGuy

+1

¿Cómo quieres que se vea tu salida? Ejemplo de salida? –

+1

@methuselah Ponlo en la publicación original con un pequeño fragmento de resultado y esa explicación: * el resultado es importante aquí * y daremos una mejor pregunta :) Esto también muestra la diferencia entre 'count (n)' y 'count (*)'; con un título/pregunta apropiado es fácil redirigir a duplicados/soluciones. (Los votos a la baja solo necesitan ser temporales.) –

Respuesta

4

select count(*) from employee_table group by mgr

3

yo podía comprender por grupo mgr, entonces tendría un grupo de por gerente y puede simplemente un recuento para ver cuántas personas que gestiona gerente. Luego, puedes unirte a la mesa para obtener la información de ese gerente. Algo como:

SELECT E1.Mgr, E2.ename, Count(*) as Number FROM Employees E1 
INNER JOIN Employees E2 ON E1.mgr = E2.empno 
GROUP BY E1.Mgr 

Aunque no he probado esto.

+0

¿por qué te unes a e1.empno = e2.empno? – Gratzy

+0

Lo siento, error tipográfico - quise decir 'E1.mgr = E2.empno' –

1

Puede probar estos que no utilizan unirse a:

select mgr, count(eno) 
    from employee 
group by mgr 

o

select name, e1.mgr, count(e1.eno) 
    from employee e1 
group by rollup (e1.mgr, name) 
Cuestiones relacionadas