Laboratorium nr 5. Temat: Funkcje agregujące, klauzule GROUP BY, HAVING



Podobne dokumenty
Ćwiczenie 3 funkcje agregujące

Język SQL. Rozdział 4. Funkcje grupowe Funkcje grupowe, podział relacji na grupy, klauzule GROUP BY i HAVING.

Przestrzenne bazy danych Podstawy języka SQL

Wymagania: Konstrukcja prostych zapytań w języku SQL, umiejętność wykorzystania funkcji wierszowych i agregujących.

SQL do zaawansowanych analiz danych część 1.

Wykład 7 Implementacja języka SQL w systemach baz danych Oracle sortowanie, funkcje agregujące i podzapytania.

Laboratorium nr 8. Temat: Podstawy języka zapytań SQL (część 2)

Podstawy języka SQL cz. 2

SQL (ang. Structured Query Language)

Struktura bazy danych

SQL praca z tabelami 4. Wykład 7

Relacyjne bazy danych. Podstawy SQL

Autor: Joanna Karwowska

Bazy danych 2. Wykład 4 Structured Query Language (SQL)

Klasyczna Analiza Danych

Ćwiczenie 5 podzapytania

Autor: Joanna Karwowska

Podstawy SQL. 1. Wyświetl całość informacji z relacji ZESPOLY. 2. Wyświetl całość informacji z relacji PRACOWNICY

E.14 Bazy Danych cz. 13 SQL Grupowanie danych i funkcje grupujące

Systemy GIS Tworzenie zapytań w bazach danych

Specyfika języka SQL powoduje, że łatwiej jest najpierw wytłumaczyć, jak korzystać z funkcji grupujących, a dopiero później jak grupować dane.

Laboratorium Bazy danych SQL 3 1

Optymalizacja poleceń SQL Metody dostępu do danych

Język SQL. Rozdział 6. Podzapytania Podzapytania proste i skorelowane, podzapytania w klauzuli SELECT i FROM, operatory ANY, ALL i EXISTS.

opisuje nazwy kolumn, wyrażenia arytmetyczne, funkcje nazwy tabel lub widoków warunek (wybieranie wierszy)

1.06 Wyświetl dane pracowników, którzy pracują w departamencie o nr (Id) różnym od 3.

Bazy danych - Materiały do laboratoriów IV

Relacyjne bazy danych. Podstawy SQL

Podzapytania. Rozdział 5. Podzapytania. Podzapytania wyznaczające wiele krotek (1) Podzapytania wyznaczające jedną krotkę

Wybór wszystkich danych: SELECT * FROM employee Wybór określonych kolumn lub wyrażeń: SELECT first_name, last_name, salary FROM employee

Podzapytania. Rozdział 5. Podzapytania. Podzapytania wyznaczające wiele krotek (1) Podzapytania wyznaczające jedną krotkę

Laboratorium nr 4. Temat: SQL część II. Polecenia DML

Laboratorium nr 10. Temat: Połączenia relacji

Funkcje. Rozdział 3. Funkcje. Funkcje znakowe (1) Funkcje wierszowe

Plan. Wyświetlanie n początkowych wartości (TOP n) Użycie funkcji agregujących. Grupowanie danych - klauzula GROUP BY

- język zapytań służący do zapisywania wyrażeń relacji, modyfikacji relacji, tworzenia relacji

SQL - Structured Query Language. strukturalny język zapytań

MsAccess ćwiczenie nr 3 Kwerendy wybierające cd oraz kwerendy funkcjonalne

Podzapytania. Rozdział 5. Podzapytania. Podzapytania wyznaczające wiele krotek (1) Podzapytania wyznaczające jedną krotkę

Bazy danych Access KWERENDY

Rozdział 14 Funkcje analityczne

Technologie baz danych

Wprowadzenie do języka SQL

Język SQL. Rozdział 5. Połączenia i operatory zbiorowe

PROJEKT CZĘŚCIOWO FINANSOWANY PRZEZ UNIĘ EUROPEJSKĄ. Opis działania raportów w ClearQuest

Projekt jest finansowany ze środków Unii Europejskiej, Europejskiego Funduszu Społecznego i budŝetu państwa. Studia Podyplomowe dla Nauczycieli

Klasyczna Analiza Danych

Wykład 6. SQL praca z tabelami 3

o nazwie: adresy.xls. Fragment danych źródłowych przestawiono na rysunku 1. Rysunek 1. Dane źródłowe - plik "adresy.xls"

Ćwiczenie rozpocznie się od wprowadzenia do laboratorium, po którym omówimy składnię ę polecenia INSERT pozwalającego ą na wstawianie krotek do

Bazy danych 8. Podzapytania i grupowanie. P. F. Góra

QUERY język zapytań do tworzenia raportów w AS/400

WyŜsza Szkoła Zarządzania Ochroną Pracy MS EXCEL CZ.2

Technologie baz danych

Grupowanie i funkcje agregujące

Język SQL, zajęcia nr 2

Agregacja i Grupowanie Danych. Funkcje Agregacji. Opcje GROUP BY oraz HAVING

Język SQL. instrukcja laboratoryjna. Politechnika Śląska Instytut Informatyki. laboratorium Bazy Danych

SQL - Structured Query Language -strukturalny język zapytań SQL SQL SQL SQL

1: 2: 3: 4: 5: 6: 7: 8: 9: 10:

Laboratorium Bazy danych SQL 2

Biuletyn techniczny. Funkcje dodatkowe dla Clarion Report Writer CDN OPT!MA Copyright 2006 COMARCH S.A.

Konstruowanie Baz Danych DQL agregacja danych

Zadania z SQLa (MS SQL Server)

Przykład powyżej pokazuje, że w zapytaniu można umieszczać funkcje zarówno zdefiniowane w ramach środowiska, jak również własne.

Język SQL. Rozdział 2. Proste zapytania

Ćwiczenie zapytań języka bazy danych PostgreSQL

Grupowanie danych klauzula GROUP BY

Podstawowe zapytania SELECT (na jednej tabeli)

Podstawy języka SQL. SQL Structured Query Languagestrukturalny

Konstruowanie Baz Danych SQL UNION, INTERSECT, EXCEPT

CAL Access 3 zajęcia 6. Raporty

Informatyka sem. III studia inżynierskie Transport 2018/19 LAB 2. Lab Backup bazy danych. Tworzenie kopii (backup) bazy danych

W y k ł a d SELECT. Polecenie wyświetlające zawartość tabeli. Składnia uproszczona: Temat: Polecenie SELECT. Plan wykładu:

Autor: Joanna Karwowska

Aliasy Select p.first_name, p.salary, j.job_title from employees p, jobs j where p.job_id=j.job_id;

Bazy Danych - Instrukcja do Ćwiczenia laboratoryjnego nr 8

Wstęp 5 Rozdział 1. Podstawy relacyjnych baz danych 9

Wstęp Wprowadzenie do BD Podstawy SQL. Bazy Danych i Systemy informacyjne Wykład 1. Piotr Syga

Zadania SELECT do schematu EDS (EMP, DEPT, SALGRADE)

Wprowadzenie do baz danych

Zapytania do bazy danych

Język SQL. Rozdział 10. Perspektywy Stosowanie perspektyw, tworzenie perspektyw prostych i złożonych, perspektywy modyfikowalne i niemodyfikowalne.

ORACLE. System Zarządzania Bazą Danych Oracle. Oracle Advanced SQL

Technologie baz danych

Wyświetl imie i nazwisko ucznia, nazwę przedmiotu z którego otrzymał ocenę niedostateczną. Nazwij tę kwerendę oceny niedostateczne.

Bazy danych 6. Podzapytania i grupowanie. P. F. Góra

Krótki przegląd zapytań

Bazy danych SQL Server 2005

W tej części zajmiemy się ćwiczeniami dotyczącymi modyfikacji rekordów.

Bazy danych Access KWERENDY

PODZAPYTANIE (SUBSELECT)

Funkcje bazy danych. Funkcje bazodanowe są specyficzną kategorią

3. Podzapytania, łączenie tabel i zapytań

1 DML - zapytania, część II Grupowanie Operatory zbiorowe DML - modyfikacja 7. 3 DCL - sterowanie danymi 9.

Bazy danych. Plan wykładu. Zależności funkcyjne. Wykład 2: Relacyjny model danych - zależności funkcyjne. Podstawy SQL.

Podzapytania. Podzapytania nieskorelowane i skorelowane

Modelowanie związków encji. Oracle Designer: Diagramy związków encji. Encja (1)

BAZY DANYCH algebra relacyjna. Opracował: dr inż. Piotr Suchomski

Transkrypt:

Laboratorium nr 5 Temat: Funkcje agregujące, klauzule GROUP BY, HAVING Celem ćwiczenia jest zaprezentowanie zagadnień dotyczących stosowania w zapytaniach języka SQL predefiniowanych funkcji agregujących. PLAN LABORATORIUM: 1. Charakterystyka funkcji agregujących. 2. Przegląd dostępnych funkcji agregujących, sposób uŝycia. 3. Konstruowanie zapytań z jedną grupą. 4. Konstruowanie zapytań z wieloma grupami. 5. Podział grup na podgrupy. 6. Filtrowanie grup. 7. Najczęstsze błędy przy konstrukcji zapytań z funkcjami agregującymi. 8. Przegląd zaawansowanych konstrukcji zapytań z funkcjami agregującymi. 1. Funkcje agregujące Funkcje agregujące działają na zbiorach rekordów, nazywanych grupami (w przeciwieństwie do funkcji wierszowych, które zawsze działają na jednym rekordzie). Przed zastosowaniem funkcji agregującej konieczne jest podzielenie rekordów na grupy, tzw. grupowanie. Do jednej grupy naleŝą te rekordy relacji, dla których tzw. wyraŝenie grupujące zwraca tą samą wartość. WyraŜeniem grupującym jest najczęściej pojedynczy atrybut relacji. Po podziale rekordów na grupy w kaŝdej z grup zostaje zastosowana funkcja agregująca, która wylicza pojedynczą wartość dla grupy. Stąd w wyniku zapytania otrzymujemy tyle rekordów, ile grup zostało utworzonych w wyniku operacji grupowania. Problem: znajdź średnie wynagrodzenie pracowników dla kaŝdej grupy stanowisk. 1

Przykład zapytania z grupowaniem i funkcją agregującą: znajdź średnie wynagrodzenie pracowników dla kaŝdej grupy stanowisk". WyraŜeniem grupującym, które dostarcza wartości dzielące zbiór rekordów relacji EGZAMINATORZY na grupy, jest atrybut STANOWISKO. Przykładowy zbiór rekordów został podzielony na trzy grupy: pierwszą dla wartości ADIUNKT, znajdują się w niej trzy rekordy, następną dla wartość ASYSTENT, naleŝą do niej dwa rekordy, wreszcie ostatnią dla wartości WYKŁADOWCA z pięcioma rekordami. Następnie w kaŝdej z grup wartości atrybutu WYNAGRODZENIE zostają poddane dzianiu funkcji agregującej, wyliczającej średnią. W wyniku zapytania otrzymujemy po jednym rekordzie dla kaŝdej grupy etatowej: rekord zawiera wartość wyraŝenia grupującego, a więc atrybutu STANOWISKO i wyliczonym średnim wynagrodzeniem w tej grupie. 2

2. Rodzaje funkcji agregujących Funkcje: o MAX - maksimum, o SUM- suma. o COUNT - liczba wystąpień, o MIN- minimum, o AVG - średnia, Składnia: nazwa_funkcji(all distinct wyraŝenie) Szczególny przypadek - funkcja COUNT: o COUNT(*) - liczba rekordów, o COUNT(all distinct wyraŝenie) - liczba niepustych wartości wyraŝenia. Do wyliczenia średniej słuŝy funkcja AVG. Funkcja COUNT pozwala na znalezienie liczby wystąpień. Funkcje MAX i MIN umoŝliwiają znalezienie, odpowiednio, wielkości maksymalnej i minimalnej w zbiorze. Funkcja SUM umoŝliwia wyliczenie sumy elementów. KaŜda z funkcji posiada jeden parametr, będący wyraŝeniem dostarczającym wartości do obliczeń. W przypadku funkcji AVG i SUM wyraŝenie musi dostarczać wartości liczbowe, pozostałe funkcje agregujące przyjmują wartości dowolnego typu podstawowego. Przed wyraŝeniem moŝna umieścić słowo kluczowe DISTINCT, wówczas do obliczeń zostaną wzięte wartości wyraŝenia po eliminacji powtórzeń. Umieszczenie w wywołaniu funkcji samego wyraŝenia lub poprzedzenie wyraŝenia słowem ALL powoduje, Ŝe do obliczeń będą brane wszystkie wartości wyraŝenia. Dodatkowego komentarza wymaga uŝycie funkcji COUNT. Funkcja zwróci liczbę niepustych wartości wyraŝenia w grupie (wartości róŝnych od null). Dodanie słowa DISTINCT spowoduje policzenie róŝnych niepustych wystąpień wartości wyraŝenia w grupie. Z kolei jeśli w wywołaniu funkcji wyraŝenie zastąpimy gwiazdką (symbol *), wówczas zostanie policzona liczba rekordów naleŝących do grupy. Pozostałe funkcje agregujące równieŝ pomijają przy obliczeniach wartości puste, stąd nie ma konieczności stosowania mechanizmów eliminujących wartości puste. 3. Zapytania z jedną grupą Są to zapytania bez wyraŝenia grupującego, stąd wszystkie rekordy, odczytane przez zapytanie, trafiają do tej samej jednej grupy, a wynikiem zapytania będzie zawsze jeden rekord z wartościami wyliczonymi przez umieszczone w klauzuli SELECT zapytania funkcje agregujące. Przykładowe zapytanie wylicza dwie wartości: minimalne wynagrodzenie i maksymalne wynagrodzenie. Wynikiem zapytania jest jeden rekord z dwiema wartościami. 3

4. Zapytanie z wieloma grupami Konstruując zapytania z wieloma grupami konieczne jest zdefiniowanie wyraŝenia grupującego. WyraŜenie grupujące umieszcza się w klauzuli GROUP BY. W przykładzie zbiór rekordów relacji PRACOWNICY zostaje podzielony na grupy ze względu na wartość atrybutu id_stanowisko, następnie w kaŝdej z grup zostaje wyliczona wartość średniego wynagrodzenia pracowników, zatrudnionych na danym stanowisku. W wyniku zapytania otrzymujemy tyle rekordów, ile jest stanowisk. Wynik zapytania zostaje posortowany ze względu na wartość wyraŝenia grupującego, a więc atrybutu id_stanowisko. 5. Podział grup na podgrupy. Istnieje moŝliwość podziału grup, odczytywanych przez zapytanie, na podgrupy. Realizuje się to umieszczając w klauzuli GROUP BY kilka wyraŝeń grupujących. W przykładzie zbiór rekordów relacji PRACOWNICY zostaje podzielony na grupy ze względu na wartość atrybutu id_stanowisko (pierwsze wyraŝenie grupujące), następnie rekordy w kaŝdej z grup zostają podzielona na podgrupy ze względu na wartość atrybutu wymagrodzenie (drugie wyraŝenie grupujące). Funkcja agregująca zostaje wykonana w kaŝdej z podgrup. Interpretacja wyniku przykładowego zapytania jest następująca: otrzymujemy dla 4

kaŝdego wynagrodzenia informację o liczbie pracowników zarabiających daną kwotę pracujących na poszczególnych stanowiskach. 6. Filtrowanie grup Zapytanie z grupowaniem moŝna dodatkowo wyposaŝyć w mechanizm filtrowania grup. Realizuje się to umieszczając warunek logiczny w dodatkowej klauzuli HAVING. NaleŜy pamiętać, Ŝe w warunku tym moŝna uŝyć jedynie wyraŝeń grupujących i/lub funkcji agregujących. Wartościowanie warunku następuje po utworzeniu grup. Grupy, dla których warunek nie jest spełniony, zostają odrzucone (nie pojawiają się w wyniku zapytania). W przykładzie zbiór rekordów relacji PRACOWNICY zostaje pogrupowany ze względu na wartość atrybutu id_stanowisko, jednak odrzucone zostają te grupy, w których jest mniej niŝ dwa rekordy. W kaŝdej z pozostałych grup zostaje wyliczone średnie wynagrodzenie pracowników, naleŝących do stanowisk. 5

7. Najczęstsze błędy przy konstrukcji zapytań z funkcjami agregującymi. Umieszczenie w warunku wklauzuli WHERE funkcji agregującej Umieszczenie w klauzuli SELECT zapytania z wieloma grupami wyraŝenia nie będącego wyraŝeniem grupującym lub funkcją agregującą. Kolejny błąd dotyczy zapytań z wieloma grupami i polega na umieszczeniu w klauzuli SELECT wyraŝenia, nie będącego wyraŝeniem grupującym (a więc nie występującym w klauzuli GROUP BY) lub funkcją agregującą. W przykładzie w klauzuli SELECT umieszczono atrybut NAZWISKO, tymczasem wyraŝeniem grupującym jest atrybut id_stanowisko. Pomimo, iŝ zapytanie zwraca wynik - jest on błędny!!! Proszę przeanalizować przykład 6

Umieszczenie w warunku w klauzuli HAVING wyraŝenia nie będącego funkcją agregującą lub wyraŝeniem grupującym. Taki warunek powinien zostać umieszczony w klauzuli WHERE Poprawnie byłoby 8. Konstrukcje zaawansowane Przykład prezentuje zapytanie z jedną grupą (a więc bez zdefiniowanego wyraŝenia grupującego), w którym zastosowano klauzulę HAVING. W takim przypadku warunek filtrujący zostaje zastosowany do jedynej grupy zapytania, jeśli warunek nie jest spełniony, zapytanie zwraca 7

wynik pusty. W przykładzie otrzymamy wynik, maksymalną płacę podstawową pracowników z miast Lublin, Biała Podlaska, pod warunkiem, Ŝe z obu miast zatrudniono w sumie przynajmniej 2 osoby. Zapytanie z klauzulą WHERE i HAVING; przykład: dla kaŝdego miasta, z którego pochodzą pracownicy, w którym średnie wynagrodzenie nie jest mniejsze niŝ 2100, podaj liczbę zatrudnionych pracowników, pomiń pracowników pracujących na stanowisku o identyfikatorze 4, wynik uporządkuj ze względu na sumę wynagrodzeń w poszczególnych miastach Jest to przykład zapytania, w którym uŝyto wszystkich zaprezentowanych dotąd klauzul. NaleŜy pamiętać o kolejności wykonywania klauzul. Jako pierwszy zostaje przetworzony warunek w klauzuli WHERE, dokonujący filtrowania rekordów relacji PRACOWNICY ze względu na wartość atrybutu ID_STANOWISKO. Do dalszego przetwarzania zostaną wzięte tylko te rekordy, gdzie ID_STANOWISKO róŝni się od 4. Następnie realizowane jest grupowanie, wyraŝeniem grupującym, umieszczonym w klauzuli GROUP BY, jest atrybut MIASTO. Powstałe grupy są filtrowane ze względu na warunek logiczny w klauzuli HAVING. Wreszcie wyliczana jest wartość funkcji agregującej, umieszczonej w klauzuli SELECT a wynik zostaje posortowany ze względu na wyraŝenie umieszczone w klauzuli ORDER BY 8

Ćwiczenie do samodzielnej realizacji: 1. Wyświetl najniŝszą i najwyŝszą pensję oraz róŝnicę dzielącą najlepiej i najgorzej zarabiających pracowników. 2. Jaka jest średnia kwota wynagrodzenia pracowników? 3. Wyświetl średnie pensje dla poszczególnych stanowisk. Wyniki uporządkuj wg malejącego średniego wynagrodzenia. 4. Wyświetl liczbę zatrudnionych pracowników. 5. Znajdź sumaryczne miesięczne wynagrodzenie dla kaŝdego stanowiska wśród pracowników. 6. Wyświetl liczbę zatrudnionych pracowników pracujących na kaŝdym ze stanowisk (Wyniki naleŝy wyświetlić wg wzoru: Na stanowisku: id_stanowisko pracuje liczba pracowników ) 7. Wyświetl nawy miast, które z których pochodzi więcej niŝ 2 pracowników. Wyniki uporządkuj wg malejącej liczby pracowników. 8. Wyświetl średnie pensje wypłacane w ramach poszczególnych stanowisk i liczbę pracowników zatrudnionych na danym stanowisku. Pomiń pracowników zatrudnionych po 2007 roku. 9. Wyświetl pensje najgorzej zarabiających pracowników pochodzących z poszczególnych miast. Wyniki uporządkuj wg malejącej pensji. 10. Podaj ile nazwisk czytelników zaczyna się na poszczególne litery alfabetu. 9