Pomoc z podzapytaniem skorelowanym

0

Hej,
mam takie zadanie:
Dla każdego działu wypisać stanowisko, na którym zatrudniono najwięcej pracowników w tym dziale

schemat bazy w google grafika https://www.google.pl/search?q=emp+dept+salgrade+tables+in+oracle&source=lnms&tbm=isch&sa=X&ved=0ahUKEwizxuLa6OvaAhUBuywKHbS7D-YQ_AUICigB&biw=927&bih=994#imgrc=1MSdYzoHazcZlM:

To zadanie muszę zrobić wykorzystując podzapytanie skorelowane

Oto co zrobiłam:

  1. to zapytanie zwraca mi dla każdego stanowiska (job) w dziale ile osób ją wykonuje

select deptno, job, count()
from emp
group by deptno, job
order by deptno, count(
) desc;

nie wiem jak przerobić powyższe zapytanie aby zwracało mi tylko te maksymalne wyniki i aby było podzapytaniem skorelowanym.

tak próbowałam:

select deptno, job, count()
from emp
group by deptno
having count(
) = (select max(count(*)), job, deptno
from emp
group by job, deptno);

select deptno, job, count()
from emp e
group by deptno
having (count(
), deptno) in (select max(count(*)), deptno
from emp
where e.empno = emp.empno
group by deptno, job);

oba zapytania są błędne, nie wiem jak z tym ruszyć

mam takie dane, że np w jednym dziale będę miała 2 stanowiska, które wykonuje taka sama liczba osób i tutaj chcę zwrócić te dwa stanowiska

0

A jak chcesz zwrócić dwa stanowiska?

0

Może coś w ten deseń:

with x as (
select 
  deptno, 
  job, 
  count(0) cnt
from emp
group by deptno,job)
select x.* from x, (select max(cnt) mcnt,deptno from x group by deptno) y where x.deptno=y.deptno and cnt=mcnt;
  1. X - generujemy zestawienie dział, stanowisko, liczba pracowników
  2. Y - spośród stanowisk działu wybieramy te z max. ilością w dziale
  3. Łączymy X i Y po diale i ilości pracowników

-- edited:
Standardowo bez sqlfidle nie testowałem ;-)

0

Sto departamentów z największą liczbą pracowników:

SELECT Dept.*, count(Emp.deptno) as employees_quantity FROM Dept, Emp WHERE Dept.deptno = Emp.deptno GROUP BY Dept.deptno ORDER BY employees_quantity DESC LIMIT 100

I teraz może lekka dygresja, ale ludzie... nie nazywa się relacji oraz kolumn w stylu "deptno" albo "emp", to jest szkodliwa metodologia.

Należy stosować pełne wyrazy, tak aby wszystko było jak najbardziej "samowyjaśniające się".

"Dept" = "departament"
"emp" = "employee"
"deptnpo" = id (jeżeli to klucz podstawowy z autogeneracją) lub "departament_number", a wtabeli Emp klucz obcy: departament_id lub departament_departament_number (podwójnie departament nieprzypadkowo)
"hiredate" = "hire_date"

i tak dalej.... O wiele przyjemniej się z czymś takim pracuje i czyta, rzygam za przeproszeniem kilku literowymi nazwami tabel i kolumn, albo wyrazami posklejanymi w jednen tak jakby nie było znaku _

1 użytkowników online, w tym zalogowanych: 0, gości: 1