poniedziałek, 24 września 2018

SQLite - klauzula HAVING


SQLite - klauzula HAVING

Klauzula HAVING umożliwia określenie warunków, które filtrują wyniki grupy w ostatecznych wynikach.
Klauzula WHERE umieszcza warunki na wybranych kolumnach, podczas gdy klauzula HAVING umieszcza warunki na grupach utworzonych przez klauzulę GROUP BY.
Składnia
Poniżej znajduje się pozycja klauzuli HAVING w zapytaniu SELECT.
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
Klauzula HAVING musi przestrzegać klauzuli GROUP BY w zapytaniu i musi również poprzedzać klauzulę ORDER BY, jeśli jest używana. Poniżej znajduje się składnia instrukcji SELECT, w tym klauzula HAVING.
SELECT kolumna1, kolumna2
FROM tabela1, tabela2
WHERE [ warunek ]
GROUP BY kolumna1, kolumna2
HAVING [ warunek ]
ORDER BY kolumna1, kolumna2

Przykład
Rozważ tabelę PRACOWNIK z następującymi zapisami.
id          nazwisko    wiek        adres       pensja
----------  ----------  ----------  ----------  ----------
1           Adam        32          Warszawa    2000.0
2           Piotr       25          Piaseczno   1500.0
3           Tomasz      23          Grodzisk    2000.0
4           Marek       25          Płock       6500.0
5           Dawid       27          Halinów     8500.0
6           Katarzyna   22          Marki       4500.0
7           Jan         24          Kraków      4500.0
8           Paweł       24          Zielonka    3500.0
9           Jan         44          Kobyłka     5000.0
10          Jan         45          Nieporęt    5000.0
Poniżej znajduje się przykład, który wyświetli rekordy, dla którego liczba nazw jest mniejsza niż 2.
sqlite > SELECT * FROM PRACOWNIK GROUP BY nazwisko HAVING count(nazwisko) < 2;
Spowoduje to uzyskanie następującego wyniku.
id          nazwisko    wiek        adres       pensja
----------  ----------  ----------  ----------  ----------
1           Adam        32          Warszawa    2000.0
5           Dawid       27          Halinów     8500.0
6           Katarzyna   22          Marki       4500.0
4           Marek       25          Płock       6500.0
8           Paweł       24          Zielonka    3500.0
2           Piotr       25          Piaseczno   1500.0
3           Tomasz      23          Grodzisk    2000.0
Oto przykład, który wyświetli rekordy, dla którego liczba nazw jest większa niż 2.
sqlite > SELECT * FROM PRACOWNIK GROUP BY nazwisko HAVING count(nazwisko) > 2;
Spowoduje to uzyskanie następującego wyniku.
id          nazwisko    wiek        adres       pensja
----------  ----------  ----------  ----------  ----------
10          Jan         45          Nieporęt    5000.0


Brak komentarzy:

Prześlij komentarz