2017-05-21 4 views
0

ich eine Tabelle EMPLOYEE genannt habeSuche nach doppeltem Wert


| Mitarbeiter_ID | Name | supervisor_id |

| 123 | Ace Ven | NULL |

| 124 | Ben Agent | 123 |

| 125 | Sam Marken | 123 |

| 126 | Bob Teebeutel | 125 |

| 127 | Matthew Smith | 125 |

| 128 | Toby McQuire | 123 |


Ich versuche, die Aufsichtsbehörden und listen die Zahl der Mitarbeiter sie zu finden. Wie Sie sehen können, ist die Supervisor-ID identisch mit der Mitarbeiter-ID. Sollte kommen wie diese


Name | total_mitarbeiter |

Ace Ven | 3 |

Sam Marken | 2 |


ich versuchte

SELECT supervisor_id, name, count (supervisor_id) AS total_employees FROM EMPLOYEE GROUP BY-Bezeichnung (total_employees> 0);

was überhaupt nicht funktioniert (sorry über das Format, kann nicht scheinen, es zur Arbeit zu bringen).

+0

@ Erdbeere - Nur "einfacher Beitritt" wird das Ergebnis nicht wiedergeben, was OP erwartet. –

+0

@otoshavadze Ich bitte zu unterscheiden – Strawberry

Antwort

0

Subquery zählt, wie viele Datensätze/Mitarbeiter für jede supervisor_id sind, dann ist dieses Ergebnis einfach Tabelle wieder schlossen sich ihren Namen für die Beschaffung von:

select your_table.name, t.total_employees from your_table 
inner join 
(select supervisor_id, count(*) as total_employees from your_table where supervisor_id is not null group by supervisor_id) t 
on your_table.employee_id = t.supervisor_id 
+0

Das ist eine Menge Abfrage – Strawberry

0

Ein einfaches verbinden genügt ...

Select x.name 
    , count(*) total 
    from employee x 
    join employee y 
    on y.supervisor_id = x.employee_id 
group 
    by x.employee_id; 
+1

Dies ist falsch 'Gruppe von 'Syntax –

+0

@OtoShavadze Nein. Das ist in Ordnung, weil es eine funktionale Abhängigkeit gibt - obwohl der Name technisch eindeutig sein sollte. – Strawberry