Zapoznaj się z prezentacją sposobów konstruowania zapytań wykorzystujących grupowanie danych w języku SQL.
Polecenie 2
Przygotuj kwerendę zwracającą listę osób, które uczestniczyły w różnych zajęciach w więcej niż dwóch obiektach. Wyniki zapytania powinny zawierać identyfikator, imię, nazwisko osoby oraz liczbę różnych obiektów, w których dana osoba brała udział w zajęciach. Rekordy powinny zostać uporządkowane malejąco według liczby obiektów oraz alfabetycznie według nazwisk.
W pliku zajecia.sql.zip zamieszczono dane dla bazy MariaDB.
Linia 1. SELECT kw kropka ido przecinek kw kropka oimie przecinek kw kropka onazwisko przecinek COUNT otwórz nawias okrągły kw kropka ido zamknij nawias okrągły liczba podkreślnik obiektów.
Linia 2. FROM.
Linia 3. otwórz nawias okrągły.
Linia 4. SELECT DISTINCT w kropka id podkreślnik zajec przecinek w kropka id podkreślnik osoby ido przecinek o kropka imie oimie przecinek o kropka nazwisko onazwisko przecinek z kropka zajecia przecinek nazwa.
Linia 5. FROM wejscia w.
Linia 6. JOIN zajecia z USING otwórz nawias okrągły id podkreślnik zajec zamknij nawias okrągły.
Linia 7. JOIN osoby o USING otwórz nawias okrągły id podkreślnik osoby zamknij nawias okrągły.
Linia 8. JOIN obiekty ob ON z kropka id podkreślnik obiektu znak równości ob kropka id podkreślnik obiektu.
Linia 9. zamknij nawias okrągły kw.
Linia 10. GROUP BY kw kropka ido.
Linia 11. HAVING liczba podkreślnik obiektów zamknij nawias ostrokątny 2.
Linia 12. ORDER BY liczba podkreślnik obiektów DESC przecinek onazwisko średnik.
SELECT kw.ido, kw.oimie, kw.onazwisko, COUNT(kw.ido) liczba_obiektów
FROM
(
SELECT DISTINCT w.id_zajec, w.id_osoby ido, o.imie oimie, o.nazwisko onazwisko, z.zajecia, nazwa
FROM wejscia w
JOIN zajecia z USING(id_zajec)
JOIN osoby o USING(id_osoby)
JOIN obiekty ob ON z.id_obiektu = ob.id_obiektu
) kw
GROUP BY kw.ido
HAVING liczba_obiektów > 2
ORDER BY liczba_obiektów DESC, onazwisko;
Kwerenda zwróci 382 rekordy.
Początkowe zwrócone rekordy:
Linia 1. 502 Zuzanna Bajurska 5.
Linia 2. 48 Krystyna Baranowska 5.
Linia 3. 71 Dorota Biegaj 5.
Linia 4. 42 Anna Bieniasz 5.
Linia 5. 106 Zofia Blazejewska 5.