2012-06-12 5 views
6

Ich versuche zu Anzeige der Angestellten Nummer jedes Angestellten, der andere Mitarbeiter mit der Anzahl der Personen verwaltet er oder sie verwaltet mit der folgenden Tabelle genannt emp.COUNT ist falsch beim Gruppieren?

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 

Irgendeine Idee, wie ich das tun kann?

Ich habe

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

aber zurück:

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 

Danke für Ihre Hilfe so sehr.

+1

Können Sie bitte mehr näher erläutern? – TechGuy

+1

Wie soll Ihre Ausgabe aussehen? Beispielausgabe? –

+1

@methusalem Bringen Sie das im ursprünglichen Beitrag mit einem kleinen Ergebnisausschnitt und dieser Erklärung: * das Ergebnis ist hier wichtig * und wird für eine bessere Frage alles über :) Dies zeigt auch den Unterschied zwischen 'count (n)' und 'count (*)'; mit einem passenden Titel/Frage ist es leicht, auf Duplikate/Lösungen umzuleiten. (Down-Stimmen müssen nur temporär sein.) –

Antwort

4

select count(*) from employee_table group by mgr

3

I Gruppe von mgr actualy würde, dann würden Sie eine Gruppe pro-Manager haben und kann eine Zählung sehen einfach nicht, wie viele Personen, dass Manager verwaltet. Dann könnten Sie einen Self Join auf dem Tisch machen, um die Informationen des Managers zu erhalten. Etwas wie:

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

Obwohl ich dies nicht getestet habe.

+0

Warum melden Sie sich bei e1.empno = e2.empno an? – Gratzy

+0

Sorry, Tippfehler - ich meinte 'E1.mgr = E2.empno' –

1

Sie können diese versuchen, die nicht beitreten verwenden:

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

oder

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