2017-12-31 147 views
0

mit diesem Befehl ich in der Lage bin eine Zählung aller deutlichen manager_id von department_idOracle SQL - retieve verschiedene Daten von einem listagg

select department_id, count(distinct manager_id) from employees 
group by department_id 

gruppiert abrufen Wenn i i eine Liste der Manager sehen möchten, können verwenden diese aber das Problem ist, dass sie wiederholt werden und nicht getrennt

select department_id 
, listagg(manager_id, ' | ') within group(order by manager_id) 
from employees 
group by department_id; 

Dies gibt eine lange Liste von wiederholten manager_id.

Eine Zeile Beispiel:

100 | 100 | 100 | 100 | 100 | 120 | 120 | 120 | 120 | 120 | 120 | 120 | 120 | 121 | 121 | 121 | 121 | 121 | 121 | 121 | 121 | 122 | 122 | 122 | 122 | 122 | 122 | 122 | 122 | 123 | 123 | 123 | 123 | 123 | 123 | 123 | 123 | 124 | 124 | 124 | 124 | 124 | 124 | 124 | 124 

Ich möchte eine Liste von einzigartigen manager_ids haben zu können, nicht wie die oben eine Wiederholung. Wie soll ich das machen?

Antwort

1

können Sie eine Unterabfrage verwenden, um Duplikate zu entfernen:

select department_id, count(*), 
     listagg(manager_id, ' | ') within group (order by manager_id) 
from (select distinct department_id, manager_id 
     from employees 
    ) e 
group by department_id