Proste zadanie z zapytań sql.

0

Witam mam zadanie na przedmiot zawodowy ze szkoły ...

"Podaj ile ocen wystawili poszczególni nauczyciele dla zadań domowych. Dane posortuj malejąco względem liczby wystawionych ocen."

Tabela ocena

id
id_nauczyciel
id_uczen
id_przedmiot
ocena
id_kategoria_ocen

Tabela nauczyciele

id
imie
nazwisko
data_urodzenia

Moje zapytanie

SELECT DISTINCT CONCAT(imie," ",nazwisko, COUNT(ocena))
FROM ocena, nauczyciel
WHERE id_kategoria_ocen =2;

30 minut męczenia przy jednym zadanku .... ? Już nie mam pojęcia co źle robie i czego nie robie ...

0

Nigdzie nie widze GROUP BY

EDIT: joina tez nie masz... - i to chyba tyle z kategorii czego nie robie

0

@stivens:
SELECT DISTINCT CONCAT(imie," ",nazwisko), COUNT(ocena)
FROM ocena, nauczyciel
WHERE ocena.id_kategoria_ocen =2
GROUP By ocena DESC;

Warunek where na pewno dobry, sortowanie malejące jest, informacje z odpowiednich tabelek są pobierane
niby używam COUNT(ocena) ale ...

zwraca mi dziwny wynik

CONCAT(imie," ",nazwisko)
COUNT(ocena)
Marta Boroń
24700
Marta Boroń
25300
Marta Boroń
22800
Marta Boroń
25700
Marta Boroń
26100

0

Pogrupuj po nauczycielach a nie ocenach. I zjoinuj prawidlowo te relacje bo teraz masz iloczyn kartezjanski.

Zrob sobie select * from ocena, nauczyciel to sie zdziwisz.

EDIT: GROUP By ocena DESC; <-- wait, what? To sie w ogole parsuje? GROUP BY to nie ORDER BY.

0

@stivens:
Racja powinno być Order by do DESC

SELECT CONCAT(imie," ",nazwisko), COUNT(ocena)
FROM ocena, nauczyciel
WHERE id_kategoria_ocen =2
GROUP By imie
ORDER By COUNT(ocena) DESC

Dość mało rekordów mi wyskoczyło, aczkolwiek więcej i bardziej zróżnicowane niż wcześniej,

Czy
Linijka pod WHERE
"AND ocena.id_nauczyciel = nauczyciel.id" - to bedzie właśnie ten join ?

0

Proponuje GROUP BY id_nauczyciel

I czemu ignorujesz usilnie wskazowke zeby joina zrobic?

0

Okej, chyba już wszystko działa. Tylko mam pytanie czemu gdy grupuje po imieniu "GROUP BY imie" daje mi troszke wiecej wyników niż jak grupuje po id_nauczyciel ?

A końcowe zapytanie to:
SELECT CONCAT(imie," ",nazwisko), COUNT(ocena)
FROM ocena,nauczyciel
WHERE id_kategoria_ocen =2
AND ocena.id_nauczyciel=nauczyciel.id
GROUP By id_nauczyciel
ORDER By COUNT(ocena) DESC

0

Powod tldr: kilku nauczycieli moze miec takie samo imie (a nawet imie i nazwisko!)

Natomiast oczekiwalbym troche odwrotnej zaleznosci (grupowanie po imieniu -> mniej rekordow). Na pewno tylko tym sie roznia?

0

@stivens:

po id_nauczyciel
Imie/Nazwisko
Suma wystawionych ocen z zadań domowych
Emil Rzepka
23
Mirosław Kiełbasa
21
Seweryn Kwapisz
21
Bożena Dolny
20
Rafał Perzyński
20
Benedykt Rąpała
20
Anita Kasprzycki
19
Oskar Brzeziński
19
Hanna Jaworek
19
Wiesław Blicharz
18
Milena Smółka
18
Konrad Kruczyński
18
Stella Binek
17

po imie
Imie/Nazwisko
Suma wystawionych ocen z zadań domowych
Szymon Kubiak
37
Seweryn Marks
36
Benedykt Grodecki
33
Gerard Antoniuk
31
Bożena Skóra
30
Miłosz Cała
28
Patryk Rosłaniec
28
Helena Suchan
27
Ewelina Maciaszczyk
26
Ada Rębacz
25
Emil Rzepka
23
Iwona Kubacki
23
Michalina Cendrowski
23
Dagmara Błażejczyk
22
Mirosław Kiełbasa
21
Igor Prusinowski
21
Rafał Perzyński
20
Anita Kasprzycki
19
Oskar Brzeziński
19
Hanna Jaworek
19
Milena Smółka
18
Joachim Drążkiewicz
18
Wiesław Blicharz
18
Marta Boroń
18
Konrad Kruczyński
18
Stella Binek
17

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