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:

wynagrodzenia

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;