COUNT, DISTINCT – funkcje grupujące cz. 2 – Kurs SQL
We wpisie: AVG, MAX, MIN, SUM – funkcje grupujące cz. 1 omówiłem już cztery funkcje grupujące w języku SQL. Teraz skupimy się na: COUNT
, DISTINCT
. Tak jak poprzednio oprzemy się na przykładowej tabeli: wynagrodzenia
, którą zobaczycie poniżej:
COUNT
– funkcja zwracająca ilość rekordów z danej kolumny, bądź spełniających warunek WHERE
. Jeżeli chcemy zatem sprawdzić ile rekordów zawiera tabela wynagrodzenia wykonamy zapytanie:
SELECT count(*) FROM wynagrodzenia; -- 8
W wyniku otrzymamy 8
, gdyż tyle wierszy znajduje się w tabeli.
Możemy wykorzystując WHERE
oraz COUNT
sprawdzić ile mamy zapisów w tabeli spełniających warunek, np. wartość wynagrodzenia > 5000
. Poniżej gotowe zapytanie SQL:
SELECT count(*) FROM wynagrodzenia WHERE wynagrodzenie>5000; -- 2
W wyniku otrzymamy 2
, dlatego, gdyż tylko dwa zapisy przekraczają wartość 5 tyś – 6231 oraz 5084.
Jeszcze jeden przykład, tym razem z użyciem klauzuli GROUP BY
. Chcielibyśmy sprawdzić ile rekordów w tabeli posiada każdy z pracowników (id_pracownika
). Gotowe zapytanie SQL wyglądać będzie zatem następująco:
SELECT id_pracownika, COUNT(*) FROM wynagrodzenia GROUP BY id_pracownika;
Wynik zapytania:
Zatem każdy z pracowników posiada po dwa rekordy w tabeli wynagrodzenia
. Jak łatwo można się domyślić, są to wynagrodzenia za miesiąc kwiecień i maj.
DISTINCT – służy do wyświetlania unikalnych wartości z danej tabeli, bądź wybranych kolumn. Spójrzmy na przykład:
SELECT DISTINCT(miesiac), rok FROM wynagrodzenia;
W tym przypadku otrzymamy tylko dwa rekordy zaprezentowane poniżej, gdyż tylko dwie pary: 4 2021
oraz 5 2021
są unikalne.
W przypadku pominięcia DISTINCT
otrzymalibyśmy 8
rekordów, dla każdego z pracownika po dwa (4 i 5 2021).
Zatem oba poniższe zapytania dają ten sam wynik.
SELECT DISTINCT(miesiac), rok FROM wynagrodzenia; -- SELECT miesiac, rok FROM wynagrodzenia GROUP BY miesiac, rok;
Jeżeli chcemy sprawdzić dla jakiego roku posiadamy w bazie wynagrodzenia, wystarczy że napiszemy zapytania SQL jak poniżej:
SELECT DISTINCT(rok) FROM wynagrodzenia; --2021
W wyniku otrzymamy rok 2021. Tak jak we wcześniejszym przykładzie wynik będzie adekwatny do zapytania:
SELECT rok FROM wynagrodzenia GROUP BY rok;