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

Polecenie SELECT w bazie danych

Object Storage Arubacloud
0 głosów
237 wizyt
pytanie zadane 1 listopada 2020 w SQL, bazy danych przez kijank Początkujący (250 p.)

Witam do podanej bazy danych 

mam stworzyc zapytania SELECT spełniające nastepujące warunki 

mam problem z SELECTami dotyczacymi pensji nauczycieli i srednia z matematyki powyzej 4. Oto wszystkie SELECTy ktore stworzylem:

SELECT * FROM `uczniowie` WHERE `klasa` LIKE '1%';

SELECT `imie` , `nazwisko` FROM `nauczyciele` INNER JOIN `klasy` ON `nauczyciele`.`id_nauczyciela`=`klasy`.`wychowawca` WHERE `klasy`.`klasa` LIKE '2%';

SELECT `klasa`,`zajecia` FROM `zajecia` WHERE `klasa` LIKE '2b';

SELECT `zajecia` FROM `zajecia` INNER JOIN `nauczyciele` ON `nauczyciele`.`id_nauczyciela`=`zajecia`.`nauczyciel_prowadzacy_id` INNER JOIN `klasy` ON `klasy`.`wychowawca`=`nauczyciele`.`id_nauczyciela` WHERE `klasy`.`klasa` LIKE '2a' GROUP BY `zajecia`.`zajecia`;

SELECT `nauczyciele`.`nazwisko`, SUM(`zajecia`.`ilosc_godzin`) AS `godziny_pracy` FROM `nauczyciele` INNER JOIN `zajecia` ON `zajecia`.`nauczyciel_prowadzacy_id`=`nauczyciele`.`id_nauczyciela` GROUP BY `nauczyciele`.`id_nauczyciela`;

SELECT `klasy`.`klasa`, SUM(`zajecia`.`ilosc_godzin`) AS `ilosc_godzin` FROM `klasy` INNER JOIN `zajecia` ON `zajecia`.`klasa`=`klasy`.`klasa` WHERE `klasy`.`klasa` LIKE '1a' GROUP BY `klasy`.`klasa_id`; 
LUB
SELECT `klasa`, SUM(`ilosc_godzin`) AS `ilosc_godzin` FROM zajecia WHERE klasa LIKE '1a' GROUP BY `klasa`;

SELECT `nauczyciele`.`imie`, `nauczyciele`.`nazwisko`, SUM(`zajecia`.`ilosc_godzin`)*350 AS `pensja` FROM `nauczyciele` INNER JOIN `zajecia` ON `zajecia`.`nauczyciel_prowadzacy_id` = `nauczyciele`.`id_nauczyciela` WHERE `pensja` < 3200 GROUP BY `nauczyciele`.`id_nauczyciela`;

SELECT `uczniowie`.`imie`, `uczniowie`.`nazwisko`,`oceny`.`przedmiot`, AVG(`oceny`.`ocena`) AS `srednia_wazona` FROM `uczniowie` INNER JOIN `oceny` ON `oceny`.`uczen_id`=`uczniowie`.`uczen_id` WHERE `uczniowie`.`uczen_id` = 1 AND `oceny`.`przedmiot` = 'Matematyka';

SELECT `uczniowie`.`imie`, `uczniowie`.`nazwisko`,`oceny`.`przedmiot`, AVG(`oceny`.`ocena`) AS `srednia_wazona` FROM `uczniowie` INNER JOIN `oceny` ON `oceny`.`uczen_id`=`uczniowie`.`uczen_id` WHERE `uczniowie`.`uczen_id` = 5 GROUP BY `oceny`.`przedmiot`;

SELECT `uczniowie`.`imie`, `uczniowie`.`nazwisko`, AVG(`oceny`.`ocena`) AS `srednia_wazona` FROM `uczniowie` INNER JOIN `oceny` ON `oceny`.`uczen_id` = `uczniowie`.`uczen_id` WHERE AVG(`oceny`.`ocena`)>4 AND `oceny`.`przedmiot`='Matematyka' GROUP BY `oceny`.`przedmiot`;

SELECT `nauczyciele`.`imie`,`nauczyciele`.`nazwisko`,`kwalifikacje`.`Przedmiot` FROM `nauczyciele` INNER JOIN `kwalifikacje` ON `kwalifikacje`.`nauczyciel_id`=`nauczyciele`.`id_nauczyciela` ORDER BY `nauczyciele`.`nazwisko`;

SELECT `zajecia`.`zajecia`, `nauczyciele`.`imie`, `nauczyciele`.`nazwisko` FROM `zajecia` INNER JOIN `nauczyciele` ON `nauczyciele`.`id_nauczyciela`=`zajecia`.`nauczyciel_prowadzacy_id` ORDER BY `zajecia`.`zajecia`;

SELECT `klasy`.`klasa`,`klasy`.`profil` FROM `klasy`;


 

komentarz 1 listopada 2020 przez adrian17 Ekspert (344,860 p.)

To jeszcze pokaż z którymi konkretnie zapytaniami masz problem i jaki problem.

Niezbyt też rozumiem z treści, po czym ważona ma być "średnia ważona".

Natomiast na oko... poczytaj czym się różni WHERE od HAVING :)

komentarz 1 listopada 2020 przez kijank Początkujący (250 p.)

Mam problem przy tych dwóch selectach:

SELECT `nauczyciele`.`imie`, `nauczyciele`.`nazwisko`, SUM(`zajecia`.`ilosc_godzin`)*350 AS `pensja` FROM `nauczyciele` INNER JOIN `zajecia` ON `zajecia`.`nauczyciel_prowadzacy_id` = `nauczyciele`.`id_nauczyciela` WHERE `pensja` < 3200 GROUP BY `nauczyciele`.`id_nauczyciela`;

oraz

SELECT `uczniowie`.`imie`, `uczniowie`.`nazwisko`, AVG(`oceny`.`ocena`) AS `srednia_wazona` FROM `uczniowie` INNER JOIN `oceny` ON `oceny`.`uczen_id` = `uczniowie`.`uczen_id` WHERE AVG(`oceny`.`ocena`)>4 AND `oceny`.`przedmiot`='Matematyka' GROUP BY `oceny`.`przedmiot`;

Przy pierwszym nie zwraca zadnych wynikow, gdy wyswietlam bez warunku to widac ze jest jeden nauczyciel spelniajacy wymogi 

Natomiast przy drugim mam nastepujacy komunikat bledu #1111 - Invalid use of group function

Ta srednia wazona sie nie przejmuj bo jednak stwierdzila ze oceny maja byc bez wagi

komentarz 1 listopada 2020 przez adrian17 Ekspert (344,860 p.)

Hm, po pierwsze... w tabeli już jest pole `pensja`. Po co liczysz je ręcznie przez sum()?

A ogólnie, do filtrowania wyników po grupowaniu jest HAVING. Poczytaj jak się go używa :)

Np

select student_id, avg(score) as avg_score
from students
group by student_id
having avg_score > 3;

 

komentarz 1 listopada 2020 przez kijank Początkujący (250 p.)
Masz racje, totalnie zapomniałem o tym, że HAVING występuje po GROUP BY. Gdybym do tabeli oceny dodal kolumne z waga to w jaki sposob wyswietlic sama srednia wazona?
komentarz 1 listopada 2020 przez adrian17 Ekspert (344,860 p.)
Średnia ważona to po prostu sum(ocena*waga) / sum(waga), z tego co kojarzę.

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
0 odpowiedzi 133 wizyt
pytanie zadane 13 grudnia 2019 w PHP przez manager96 Bywalec (2,050 p.)
0 głosów
1 odpowiedź 165 wizyt
0 głosów
1 odpowiedź 190 wizyt

92,568 zapytań

141,424 odpowiedzi

319,630 komentarzy

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

...