Pomoc w zapytaniach

0

Witam,
proszę kogoś o pomoc w rozwiązaniu paru zapytań.

Mamy tabelki:
user image

Teraz potrzebuje takie zapytania wykonać:

  • Dla każdego kierownika wypisać jego nazwisko i datę zatrudnienia, oraz podać nazwisko i datę zatrudnienia jego pracownika zatrudnionego najpóźniej.
  • Znaleźć pracowników o najgorszej pensji w każdej grupie zarobkowej. Podać ich nazwisko, numer i pensję.
  • Znaleźć pracowników zarabiających mniej niż średnia w ich dziale. Uwzględnić tylko te działy, które zatrudniają więcej niż 2 pracowników

Próbuję sam to zrobić, ale nic mi sensownego z tego nie wychodzi :( Wiem, że chodzi o podzapytania skorelowane i nieskorelowane. Będę bardzo wdzięczny za pomoc.

0

Proszę bardzo @Marcin.Miga przykład dla ostatniego zapytania:

 select deptno, ename from emp e 
  where (select count(*) from emp e2 where e2.deptno=e.deptno)>2 and
  sal<(select avg(sal) from emp e3 where e3.deptno=e.deptno)
  group by deptno, ename;

Dla pierwszego mam coś takiego:

 select e1.ename, e1.hiredate, 
  (select e2.ename from emp e2 where e2.mgr=e1.empno and e2.HIREDATE = 
    (select max(e3.HIREDATE) from emp e3 where e3.mgr=e1.empno)
  ) as emp_name, 
  (select e2.hiredate from emp e2 where e2.mgr=e1.empno and e2.HIREDATE = 
    (select max(e3.HIREDATE) from emp e3 where e3.mgr=e1.empno)
  ) as emp_hiredate
  from emp e1 where job='MANAGER';

Do drugiego udało mi się zrobić coś takiego:

SELECT s.*, e1.* FROM salgrade s
  JOIN emp e1 on s.LOSAL<e1.sal and s.HISAL>e1.sal
  where e1.sal = (
    SELECT min(e2.sal) FROM salgrade s2
      JOIN emp e2 on s2.LOSAL<e2.sal and s2.HISAL>e2.sal
      where s2.grade=s.grade
    ); 
1

Inne podejście do ostatniego:

SELECT e.*
FROM emp e
  JOIN (SELECT deptno, count(*) AS ilosc, AVG(sal) AS srednia FROM emp GROUP BY deptno) t ON e.deptno=t.deptno AND t.ilosc>2
WHERE e.sal<t.srednia

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