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

PostgreSQL błędne zapytanie z having i case

Object Storage Arubacloud
0 głosów
256 wizyt
pytanie zadane 28 marca 2021 w SQL, bazy danych przez Gerlach Nowicjusz (220 p.)
SELECT AVG(ocena) as SREDNIA, STDDEV(ocena) as odchyleniestandardowe, CASE student.stacjonarny WHEN stacjonarny=TRUE THEN 'stacjonarny' WHEN stacjonarny=FALSE THEN 'niestacjonarne' END AS studia  FROM projekt,student GROUP BY student.stacjonarny HAVING student.stacjonarny=TRUE OR student.stacjonarny=FALSE ORDER BY student.stacjonarny;

Witam, mam problem ponieważ chcę zrobić te zadanie o treści:

Do tabeli projekt dodaj kolumnę ocena. Uzupełnij w istniejących projektach nowo utworzoną kolumnę przykładowymi wartościami. Za pomocą pojedynczego zapytania oblicz wartości średnie oraz odchylenia standardowe ocen. Obliczenia powinny uwzględniać dwie grupy - studentów stacjonarnych oraz niestacjonarnych. Wyniki należy przedstawić tak jak w poniższej tabeli. Uwaga! drugą kolumnę 'studia' utwórz korzystając z konstrukcji CASE-WHEN-ELSE na podstawie kolumny typu logicznego 'stacjonarny' znajdującej się w tabeli student.

Wykonując powyższe zapytanie, które prawdopodobnie jest źle zrobione, ale nie wiem co - pokazują mi inne wyniki niż oczekiwane. Przeszukiwałem Google i w sumie nic nie pomogło. Mógłby ktoś pomóc wskazać gdzie jest błąd?

Jak wyglądają tabele:

projekt:

tabela student:

 

 

1 odpowiedź

0 głosów
odpowiedź 29 marca 2021 przez areklipno Stary wyjadacz (11,930 p.)
wybrane 29 marca 2021 przez Gerlach
 
Najlepsza

wg mnie powinno to wyglądać tak:

SELECT AVG(ocena) as SREDNIA
, STDDEV(ocena) as odchyleniestandardowe
, CASE WHEN student.stacjonarny=TRUE THEN 'stacjonarny' else 'niestacjonarne' END AS studia  
FROM projekt,student 
where student.stacjonarny=TRUE OR student.stacjonarny=FALSE
--- lub where student.stacjonarny is not null
GROUP BY CASE WHEN student.stacjonarny=TRUE THEN 'stacjonarny' else 'niestacjonarne' END
ORDER BY 3

poza tym przydałoby się jakoś połączyć tabele student i projekt (po jakimś Id)

komentarz 29 marca 2021 przez Gerlach Nowicjusz (220 p.)

Zapomniałem o tym, że jest tabela projekt_student zawierają id studenta razem z id projektu i właśnie 2x JOIN musiałem użyć (że też wcześnie na to nie wpadłem, a robiłem kiedyś zadania z pięcioma złączeniami i pykło), w ten sposób wpadłem na pomysł tego zapytania: 

SELECT avg(ocena) AS "Średnia", stddev(ocena) AS "odchylenie standardowe",
 (CASE student.stacjonarny WHEN true THEN 'stacjonarne' ELSE 'niestacjonarne' END) 
AS studia FROM projekt JOIN projekt_student ON projekt.projekt_id=projekt_student.projekt_id
 JOIN student ON projekt_student.student_id=student.student_id GROUP BY student.stacjonarny;

Wynik pokazuje mi teraz prawidłowy, natomiast miałem wątpliwość co do pierwszego wiersza, ale przypomniało mi się, że relacja jest 1 do n, czyli jeden student może mieć wiele projektów stąd wszystko po głebszej analizie się zgadza.

 

Dzięki za chęć i twoja odpowiedź po części mnie nakierowała.

Podobne pytania

+1 głos
1 odpowiedź 248 wizyt
pytanie zadane 29 maja 2022 w SQL, bazy danych przez Martita Bywalec (2,470 p.)
0 głosów
2 odpowiedzi 580 wizyt
0 głosów
0 odpowiedzi 726 wizyt

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 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!

...