Przejdź do treści głównej
INF.03Pytanie #1064 z 1558sql-zlaczenia-i-agregacja

Dana jest tabela uczniowie o polach id, nazwisko, imie, klasa. Które zapytanie SQL wyświetli liczbę osób w poszczególnych klasach oraz nazwę klasy?

Opcje odpowiedzi:
A
SELECT SUM(id), klasa FROM uczniowie ORDER BY klasa;
B
SELECT COUNT(id), klasa FROM uczniowie ORDER BY klasa;
C
SELECT SUM(id), klasa FROM uczniowie GROUP BY klasa;
D
SELECT COUNT(id), klasa FROM uczniowie GROUP BY klasa;
Prawidłowa
Reklama

Wyjaśnienie i uzasadnienie dydaktyczne

Poprawna odpowiedź: D (SELECT COUNT(id), klasa FROM uczniowie GROUP BY klasa;)

SELECT COUNT(id), klasa FROM uczniowie GROUP BY klasa;.

Aby uzyskać liczbę osób (uczniów) w poszczególnych klasach, potrzebujemy:

  1. Zliczyć rekordy: Funkcja agregująca COUNT(). Możemy zliczyć dowolną kolumnę, która nie jest NULL dla każdego ucznia (np. COUNT(id)) lub użyć COUNT(*) do zliczenia wszystkich wierszy.
  2. Wyświetlić nazwę klasy: Dołączenie kolumny klasa do klauzuli SELECT.
  3. Grupować wyniki według klasy: Użycie klauzuli GROUP BY klasa. To spowoduje, że funkcja COUNT() będzie działać oddzielnie dla każdej unikalnej wartości w kolumnie klasa.

Zapytanie SELECT COUNT(id), klasa FROM uczniowie GROUP BY klasa; realizuje wszystkie te punkty. Opcjonalnie można dodać ORDER BY klasa na końcu, aby posortować wyniki alfabetycznie według nazwy klasy, ale nie jest to wymagane do samego zliczenia.

Dlaczego pozostałe opcje są nieprawidłowe?

  • A: SELECT SUM(id), klasa FROM uczniowie ORDER BY klasa; — Używa funkcji SUM(id), która sumowałaby wartości w kolumnie id, a nie liczyła uczniów. Brak GROUP BY przy jednoczesnym wyborze kolumny nieagregowanej (klasa) i funkcji agregującej (SUM) jest zwykle błędem składniowym lub prowadzi do nieoczekiwanych wyników (w zależności od dialektu SQL).
  • B: SELECT COUNT(id), klasa FROM uczniowie ORDER BY klasa; — Brakuje klauzuli GROUP BY klasa. Bez niej, jeśli zapytanie w ogóle zadziała, COUNT(id) zwróciłoby całkowitą liczbę uczniów w tabeli, powtórzoną dla każdej klasy (lub zwróciłoby błąd, ponieważ klasa nie jest częścią funkcji agregującej ani klauzuli GROUP BY).
  • C: SELECT SUM(id), klasa FROM uczniowie GROUP BY klasa; — Używa poprawnej klauzuli GROUP BY klasa, ale funkcja SUM(id) jest nieodpowiednia do zliczania liczby osób. Sumowałaby identyfikatory uczniów w każdej klasie.

Chcesz poćwiczyć całą kwalifikację INF.03?

Egzamin próbny na czas, nauka działami, losowe pytanie albo przegląd całej bazy — wszystko w przeglądarce i bez zakładania konta.

Rozwiąż w Quizie

Pojęcia z tego pytania

Cały słownik INF03
Reklama

Podobne pytania z działu „Sql zlaczenia i agregacja”

Ten sam obszar materiału z kwalifikacji INF.03. W całej bazie znajdziesz 43 pytań z tego działu.