Pomoc w dokończeniu zapytania Oracle SQL.

0

Napisałem takie coś:


SELECT st.student_id, st.kierunek, ROUND(AVG(o.ocena),2) AS srednia_studenta
FROM studenci st
INNER JOIN kierunki_studiow ks ON ks.symbol = st.kierunek
INNER JOIN oceny o ON o.student_id = st.student_id
WHERE ks.rodzaj_studiow = 'SL'
GROUP BY st.student_id, st.kierunek
ORDER BY st.student_id;

i ten kod powyżej dla każdego studenta, studiującego na kierunku rodzaju studiów o
symbolu SL wypisze jego identyfikator, symbol kierunku, na jakim studiuje oraz wyliczy jego
średnią ocen (zastosuj zwykłe grupowanie). Wynik działania w załączniku (wynik1).

Następnie napisałem takie coś:

SELECT kierunek, MAX(srednia_studenta) AS maks_srednia_kier FROM (
SELECT st.kierunek, ROUND(AVG(o.ocena),2) AS srednia_studenta
FROM studenci st
INNER JOIN kierunki_studiow ks ON ks.symbol = st.kierunek
INNER JOIN oceny o ON o.student_id = st.student_id
WHERE ks.rodzaj_studiow = 'SL'
GROUP BY st.student_id, st.kierunek) 
GROUP BY kierunek
ORDER BY kierunek;

ten kod wyświetla maksymalną średnią ocenę studentów na poszczególnych kierunkach
rodzaju SL. Wynik działania w załączniku (wynik2)

Teraz mam problem bo muszę to połączyć w jedno. Wynik ma wyglądać tak jak w załączniku (wynik_koncowy). Niestety nie mogę sobie jakoś z tym poradzić dlatego będę wdzięczny za pomoc.

0

Ja bym pokombinowala z with. Tzn jedno zapytanie w with a drugie korzysta z aliasu z with.

1
SELECT y.*, x.maks_srednia_kier FROM
(
SELECT st.student_id, st.kierunek, ROUND(AVG(o.ocena),2) AS srednia_studenta
FROM studenci st
INNER JOIN kierunki_studiow ks ON ks.symbol = st.kierunek
INNER JOIN oceny o ON o.student_id = st.student_id
WHERE ks.rodzaj_studiow = 'SL'
GROUP BY st.student_id, st.kierunek
) x 
INNER JOIN
(
SELECT kierunek, MAX(srednia_studenta) AS maks_srednia_kier FROM (
SELECT st.kierunek, ROUND(AVG(o.ocena),2) AS srednia_studenta
FROM studenci st
INNER JOIN kierunki_studiow ks ON ks.symbol = st.kierunek
INNER JOIN oceny o ON o.student_id = st.student_id
WHERE ks.rodzaj_studiow = 'SL'
GROUP BY st.student_id, st.kierunek) 
GROUP BY kierunek
) y on x.kierunek=y.kierunek
ORDER BY x.student_id;
0

Marcin.Miga dzięki. Tylko małą zmianę na początku musiałem zrobić z SELECT y.*, x.maks_srednia_kier na SELECT x.*, y.maks_srednia_kier

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