Dana jest tabela programisci o polach: id, nick, ilosc_kodu, ocena. Pole ilosc_kodu zawiera liczbę linii kodu napisanych przez programistę w danym miesiącu. Aby policzyć sumę linii kodu, który napisali wszyscy programiści, należy użyć polecenia
A.
SELECT MAX(ilosc_kodu) FROM programisci;
Źle. MAX zwraca tylko największą wartość w kolumnie, a nie sumę.
B.
SELECT SUM(ilosc_kodu) FROM programisci;
Dobrze. SUM dodaje wartości ilosc_kodu ze wszystkich wierszy tabeli programisci.
C.
SELECT SUM(ocena) FROM ilosc_kodu;
Źle. Sumuje kolumnę ocena, a po FROM stoi nazwa kolumny zamiast tabeli.
D.
SELECT COUNT(programisci) FROM ilosc_kodu;
Źle. Nazwy tabeli i kolumny są zamienione, a COUNT liczy wiersze, nie sumuje.
Pytanie z egzaminu CKE, październik 2016 (arkusz E.14-X-16.08).
Sumę linii kodu policzy zapytanie
SELECT SUM(ilosc_kodu) FROM programisci;. Funkcja agregująca SUM dodaje wartości z podanej kolumny we wszystkich wierszach spełniających warunek, a bez klauzuli WHERE - w całej tabeli. Po FROM zawsze stoi nazwa tabeli, a w nawiasie funkcji nazwa kolumny. Do zapamiętania: SUM dodaje, COUNT liczy wiersze, AVG liczy średnią, a MAX i MIN zwracają wartość skrajną. Gdyby trzeba było policzyć sumę dla każdego programisty osobno albo dla kilku miesięcy, dopisuje się GROUP BY nick. Funkcja SUM pomija wartości NULL, więc wiersz bez wpisanej liczby linii nie zepsuje wyniku. Wynik takiego zapytania to jedna liczba, na przykład 12 450.Każde z błędnych zapytań psuje jeden z dwóch elementów: funkcję albo miejsce nazw.
SELECT SUM(ocena) FROM ilosc_kodu; sumuje niewłaściwą kolumnę i do tego podaje po FROM nazwę kolumny zamiast tabeli - serwer zgłosi, że tabela ilosc_kodu nie istnieje. SELECT COUNT(programisci) FROM ilosc_kodu; ma nazwy zamienione miejscami, a nawet po ich poprawieniu COUNT policzyłby wiersze, czyli liczbę wpisów, a nie liczbę linii kodu. SELECT MAX(ilosc_kodu) FROM programisci; działa, ale zwraca tylko największą wartość, czyli wynik najbardziej pracowitego programisty. Sumę wszystkich linii daje wyłącznie SUM(ilosc_kodu) z tabeli programisci. Pomaga zasada czytania zapytania od końca: najpierw sprawdź, czy po FROM stoi tabela, a dopiero potem, jaka funkcja i jaka kolumna są w części SELECT. Funkcje agregujące zawsze przyjmują nazwę kolumny, nigdy nazwę tabeli.