Witam.
Mam problem ,którego nie rozumiem. Chodzi o Having mam do zrobienia 2 zadania i oba zadania wykrzaczają się na tym samym błędzie. Co śmieszniejsze kod mojej koleżanki jest wręcz identyczny do mojego a jej wszystko działa... I ona tez nie wie co może być przyczyną.
Zad 1
Przygotowac: nazwisko, imię i numer Pesel, datę urodzenia pacjenta oraz liczbę wizyt w lekarza rodzinnego w I półroczu 2013. W wyniku uwzględniamy tylko tych pacjentów, którzy byli w podanym okresie na więcej niż 3 wizytach. Wynik uporządkować według liczby wizyt, a w obrębie tej samej ilości wizyt uporządkować alfabetycznie według nazwiska.
Select p.Imie, p.Nazwisko, p.Pesel, p.DataUrodzenia, w.DataWizyty, s.NazwaSpecjalizacji,
count(w.IdPacjenta) as IloscWizyt,
rank() over (order by P.Nazwisko desc) as rk
From Pacjenci as P join Wizyty as W
on p.idPacjenta = w.idPacjenta
join Lekarze as L
on w.IdLekarza = l.IdLekarza
join Specjalizacje as S
on s.idspecjalizacji = l.Idspecjalizacji
Where DataWizyty between '20130101' and '20130630' and NazwaSpecjalizacji = 'lekarz rodzinny'
Group by p.Imie, p.Nazwisko, p.Pesel, p.DataUrodzenia, w.DataWizyty, s.NazwaSpecjalizacji
Having count(*) > 3
Zad 2
Napisać zapytanie, które zwraca następujące dane; nazwisko, imię, Pesel oraz średnią ocen z roku 2013 dla studentów urodzonych po roku 1966. Uwzględniamy tylko tych studentów, którzy w roku 2013 otrzymali więcej niż 20 ocen. Wynik uporządkować malejąco według średniej ocen.
SELECT s.Nazwisko, s.Imie, s.Pesel,o.DataOceny,s.DataUrodzenia,
avg(o.ocena) over () AS Srednia,
count(o.ocena) AS IleOcenS
FROM Studenci AS S JOIN Oceny AS O
ON s.IdStudenta = o.IdStudenta
WHERE year(DataUrodzenia) > 1966 AND year(DataOceny) = 2013
GROUP BY s.Nazwisko, s.Imie, s.Pesel,o.DataOceny,s.DataUrodzenia,o.ocena
HAVING count(o.ocena) >20
order by avg(o.ocena) desc
Ja wiem ,że having jest do filtrowania grup. Ale jakoś go nie rozumiem. Nie wiem dlaczego mi to nie działa...
Dziękuję za wszelkie odpowiedzi.