2016-01-16 4 views
5

Załóżmy, że mam tabelę SQL "Firma" z trzema kolumnami: "identyfikator działu", "pracownik", "zadanie". Coś takiego:Zapytanie SQL SELECT

DEPARTAMENT_ID | EMPLOYEE | JOB 
-------------------------------------- 
1    | Mark  | President 
1    | Robert | Marketing Manager 
1    | Rose  | Administration Assitant 
2    | Anna  | Programmer 
2    | Michael | Programmer 
2    | Celia | Sales Manager 
3    | Jhon  | Sales Manager 
3    | Donna | Programmer 
3    | David | Marketing Manager 

chciałbym napisać kwerendę, która zwraca identyfikator wydziałów, gdzie co najmniej 50% ich pracy są takie same.

Wynik muszę w moim przykładzie będzie to:

DEPARTAMENT_ID | 
-------------------------------------- 
2    | 

Jak mogę napisać tej kwerendy SQL? Myślę, że próbowałem wszelkiego rodzaju rzeczy, ale nie rozumiem :(

+0

Pokaż co masz próbował proszę –

Odpowiedz

4

To jest trochę trudne.Musisz porównać całkowitą liczbę osób w pracy w dziale do całkowitej liczby.Tak, jedna metoda wykorzystuje dwa skupiska:..!.

select department_id 
from (select department_id, count(*) as numemp 
     from t 
     group by department_id 
    ) d join 
    (select department_id, max(numemp) as numemp 
     from (select department_id, job, count(*) as numemp 
      from t 
      group by department_id, job 
      ) d 
    group by department_id 
    ) dj 
    on d.numemp <= 2 * dj.numemp; 

można uzyskać duplikaty jeśli masz jeden dział, który jest dokładnie podzielone między dwóch miejsc pracy W tym przypadku należy użyć select distinct

+0

Omg działa idealnie !!!: O, dziękuję bardzo! Próbowałem zrobić coś takiego, ale używam, aby skomplikować zbyt dużo. Miłego dnia !! – Mayra