• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Oracle SQL HR. zadanie.

Object Storage Arubacloud
0 głosów
701 wizyt
pytanie zadane 9 grudnia 2018 w SQL, bazy danych przez Adam Kowalski Użytkownik (630 p.)
Robię zadania z sql'a i mam problem z jednym konkretnym. Mógłby ktoś mi pomóc? Korzystam z bazy HR? Oracle. Przynajmniej jakieś wskazówki.

Pozdrawiam.

 

 Wyświetl nazwisko kierownika i pensje najmniej zarabiającego podwładnego. Uwzględnij tylko pracowników, którzy maja przełożonego. Posortuj wyniki malejąco wg pensji.

1 odpowiedź

+1 głos
odpowiedź 26 stycznia 2019 przez Catalonya1992 Mądrala (5,440 p.)

Najpier musisz zbudować strukturę, która umożliwi Ci wyświetlić managera i listę jego podwładnych. Możesz ją dodatkowo posortować po numerze managera i zarobkach pracowników:

select e.manager_id, e.employee_id, e.salary
from employees e
start with e.manager_id is null
connect by prior e.employee_id = e.manager_id
order by manager_id asc, salary asc

Wyniki:

100    124    5800
100    123    6500
100    122    7900
100    120    8000
100    121    8200
100    149    10500
100    148    11000
100    114    11000
100    147    12000
100    201    13000
100    146    13500

.....


Uwaga:

1. W tym momencie wyświetlamy bezpośrednich przełożonych. Koniec końców wszyscy podlegają pod użytkownika o id=100. Bądź tego świadom :)

2. Musimy usunąć zbedne sortowanie(dodałem je by łatwiej było analizować wyniki), przy dużej liczbie rekordów może to znacznie spowolnić zapytanie.

 

Dalej musimy w jakiś sposób powartościować wyniki. Możliwości mamy wiele, moim zdaniem najlepiej skorzystać z funkcji row_number - można też rank/dense_rank wedle uznania. 

select e.manager_id, e.employee_id, e.salary, row_number () over (partition by manager_id order by salary asc) lp
from employees e
start with e.manager_id is null
connect by prior e.employee_id = e.manager_id

Wyniki dla id managera = 100

100    124    5800    1
100    123    6500    2
100    122    7900    3
100    120    8000    4
100    121    8200    5
100    149    10500    6
100    148    11000    7
100    114    11000    8
100    147    12000    9
100    201    13000    10
100    146    13500    11
100    145    14000    12
100    102    17000    13
100    101    17000    14
Jak widać pozostała najłatwiejsza część zadania. Robimy podzapytanie i wybieramy rekordy z lp = 1.

select manager_id, salary
from(
select e.manager_id, e.employee_id, e.salary, row_number () over (partition by manager_id order by salary asc) lp
from employees e
start with e.manager_id is null
connect by prior e.employee_id = e.manager_id)
where lp = 1

Wynik:

100    5800
101    4400
102    9000
103    4200
108    6900
114    2500
120    2200
121    2100
122    2200
123    2500
124    2500
145    7000
146    7000
147    6200
148    6100
149    6200
201    6000
205    8300
         24000

 

Myślę, że z wyświetleniem nazwiska zamiast id, odrzuceniem managera z nullem (ostatni rekord) oraz posortowaniem wyników sobie poradzisz. 

Jeśli masz problem ze zrozumieniem tego zapytania to zapraszam tutaj: https://www.facebook.com/nieinformatyk/

Podobne pytania

0 głosów
1 odpowiedź 298 wizyt
pytanie zadane 29 listopada 2018 w SQL, bazy danych przez olejniczakbydgoszcz Początkujący (290 p.)
0 głosów
2 odpowiedzi 178 wizyt
pytanie zadane 14 stycznia 2023 w SQL, bazy danych przez haitoke Nowicjusz (240 p.)
0 głosów
0 odpowiedzi 100 wizyt
pytanie zadane 27 maja 2022 w SQL, bazy danych przez Hardwell Dyskutant (8,980 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...