sql oracle schemat hr zagnieżdżone zapytanie

0

Proszę o małą podpowiedź jak wydobyć z tego jeszcze id_departamentu


```select max(a.ilosc)
from
(SELECT
department_id, count(*) ilosc
FROM
employees
group by department_id
order by 1)a
0

WITH cil
     AS (SELECT department_id,
                Count(*) ilosc
         FROM   employees
         GROUP  BY department_id
         ORDER  BY 1)

SELECT Max(cil.ilosc),
       dep.department
FROM   cil
       INNER JOIN cil dep
               ON Max(cil.ilosc) = dep.ilosc 
GROUP BY dep.Department
0

dzięki za poświęcony! tak się zastanawiam czy można to zrobić szybciej analitycznymi funkcjami oracle

0

Nie robiłbym tego na funkcjach analitycznych, lepszy efekt da poniższe zapytanie:


select * from (

select department_id, count(1) ilosc 
from employees 
group by department_id 
order by 2 desc nulls last 

) 
where rownum = 1;
0
Czarny Rycerz napisał(a):

Nie robiłbym tego na funkcjach analitycznych, lepszy efekt da poniższe zapytanie:


select * from (

select department_id, count(1) ilosc 
from employees 
group by department_id 
order by 2 desc nulls last 

) 
where rownum = 1;

opisana propozycja nie sprawdzi się w sytuacji gdzie bedzie kilka departamentów o max ilosci pracowników

0

W takim razie z funkcją analityczną:


with baza (

  SELECT a.*, dense_rank() over (order by ilosc desc nulls last) lp 

  FROM (
 
    SELECT department_id, COUNT(1) ilosc  FROM employees GROUP BY department_id 
 
  )  a
)

select departament_id, ilosc from baza where lp = 1
;

0

ORA-00904: : invalid identifier
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:
Error at Line: 2 Column: 3

0

ostateczna wersja
WITH baza as (

SELECT a.*, dense_rank() OVER (ORDER BY ilosc DESC NULLS LAST) lp

FROM (

SELECT department_id, COUNT(1) ilosc  FROM employees GROUP BY department_id 

) a
)

SELECT department_id, ilosc FROM baza WHERE lp = 1
;

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