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

Polecenie SELECT w bazie danych

Aruba Cloud PRO i VPS, Openstack, VMWare, MS Hyper-V
0 głosów
197 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 (334,600 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 (334,600 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 (334,600 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 110 wizyt
pytanie zadane 13 grudnia 2019 w PHP przez manager96 Bywalec (2,050 p.)
0 głosów
1 odpowiedź 150 wizyt
0 głosów
1 odpowiedź 182 wizyt

91,786 zapytań

140,452 odpowiedzi

316,848 komentarzy

61,134 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...