Wynikiem wykonania kwerendy
SELECT sezon, COUNT(*) FROM rezerwacje GROUP BY sezon;na podstawie poniższej tabeli rezerwacje jest:
| rezerwacje | |
|---|---|
| sezon | liczba_dn |
| lato | 10 |
| zima | 4 |
| lato | 5 |
| zima | 6 |
| lato | 5 |
| zima | 9 |
| zima | 8 |
A. lato 10, 5, 5; zima 4, 6, 9, 8
B. lato 20, zima 27
C. lato 3, zima 4
D. 7
Poprawny wynik to lato 3, zima 4. Klauzula GROUP BY sezon dzieli rekordy tabeli na grupy według wartości w kolumnie sezon. Następnie funkcja agregująca COUNT(*) zlicza liczbę wierszy w każdej takiej grupie. W tabeli występują trzy rekordy z wartością lato oraz cztery rekordy z wartością zima, dlatego wynikiem są właśnie te liczności. Kolumna liczba_dn nie jest w tej kwerendzie sumowana ani wypisywana - nie znajduje się w SELECT poza funkcją agregującą. Do zapamiętania: COUNT(*) oznacza liczbę rekordów, a nie sumę wartości liczbowych. W praktyce takie zapytania stosuje się np. do zliczania zamówień, rezerwacji lub użytkowników w podziale na kategorię.
W tej kwerendzie decydujące znaczenie ma funkcja COUNT(*), a nie wartości zapisane w kolumnie liczba_dn. Wynik lato 20, zima 27 odpowiadałby zapytaniu z SUM(liczba_dn) oraz GROUP BY sezon, ponieważ 10 + 5 + 5 = 20 dla lata, a 4 + 6 + 9 + 8 = 27 dla zimy. Wynik lato 10, 5, 5; zima 4, 6, 9, 8 przedstawia wartości liczba_dn pogrupowane opisowo według sezonu, ale nie jest wynikiem SELECT sezon, COUNT(*). Wynik 7 byłby właściwy dla zliczenia wszystkich rekordów w tabeli, np. SELECT COUNT(*) FROM rezerwacje, bez podziału na sezon. Poprawny wynik to lato 3, zima 4. Typowy błąd polega na utożsamieniu GROUP BY z wypisaniem wartości z grupy albo na pomyleniu COUNT(*) z SUM(kolumna). COUNT(*) liczy wiersze należące do danej grupy.