Zapytanie do bazy danych cz2

0

Panie i Panowie bardzo dziekuje wam za odpowiedz rowna sybkosci swiatlla :) , lecz mam problem z jeszcze jednym zadaniem:

W bazie przygotować zapytanie zwracające następujące dane; nazwisko, imię studentów oraz średnią ocen wystawionych w roku1995 przez wykładowców którzy w rankingu według średniej wystawianych ocen są na miejscach od 3 do 7.

Struktura bazy danych:

**Studenci **( IdStudenta,imie,nazwisko,pesel,idGrupy)
Oceny (IdOceny,IdStudenta,IdWykladowcy,IdPrzedmiotu,IdRodzajOceny,DataOceny,Ocena)
Wykladowcy (IdWykl,Nazwisko,Imie,DataUr,Kobieta)
**RodzajeOcen ** (IdRodzaju,Nazwa,Symbol)
Przedmioty (IdPrzedmiotu,Nazwa,IdKierunkuStudiow)
KierunkiStudiow (IdKierunku,NazwaKierunku)
GrupySzkoleniowe (IdGrupy,Nazwa,IdKierunkuStudiow)

Oto moj kod:


Ranking wykladowcow ktorzy w rankingu wystawianych ocen sa od 3 do 7



;WITH TMP as
(
select W.Imie,W.Nazwisko ,avg(Ocena)as sr,dense_rank() over (order by avg(ocena) desc) as drk
from Oceny
as O join Wykladowcy as W on O.IdWykladowcy=W.IdWykladowcy

group by Nazwisko,Imie
)
Select * 
from TMP
where drk<8 and drk>2

=========================================================

///Sam ranking Studentow wg sredniej oceny bez uzycia rankingu wykladowcow




;WITH TMP as
(
select S.Imie,S.Nazwisko ,avg(Ocena)as sr,dense_rank() over (order by avg(Ocena) desc) as rankingWykladowcy
from Oceny as O 
inner join Wykladowcy as W on O.IdWykladowcy=W.IdWykladowcy
inner join Studenci as S on O.IdStudenta=S.IdStudenta
Where  year(DataOceny)=1995
group by S.Nazwisko,S.Imie
)
Select * 
from TMP
where rankingWykladowcy<8 and rankingWykladowcy>2

Czy ta to sie jakos ze soba polaczyc?

0

Można, tak:

WITH srWRank as
(
select
    IdWykladowcy
    ,DENSE_RANK() over (order by sr desc) as rnk
from (
    select 
	   w.IdWykladowcy
	   ,avg(Ocena)as sr
    from 
	   Oceny as O 
	   inner join Wykladowcy as W on O.IdWykladowcy=W.IdWykladowcy
    group by 
	   w.IdWykladowcy
    ) dt
)

select
    S.Imie
    ,S.Nazwisko 
    ,avg(Ocena)as sr
from 
    Oceny as O 
    inner join srWRank as W on O.IdWykladowcy=W.IdWykladowcy
    inner join Studenci as S on O.IdStudenta=S.IdStudenta
Where  
    DataOceny between '1995-01-01' and '1995-12-31'
    and rnk between 3 and 7
group by 
    S.Nazwisko
    ,S.Imie

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