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

Podobne dokumenty
Konstruowanie Baz Danych DQL agregacja danych

Podzapytania. Podzapytania nieskorelowane i skorelowane

Złaczenia tablic: FROM, WHERE, JOIN

Instrukcje DQL: SELECT. Zastosowanie SELECT, opcje i warianty

Wprowadzenie do psql i SQL. Język komend psql. Podstawy instrukcji SELECT

Instrukcje DML INSERT, UPDATE, DELETE. COPY

Przestrzenne bazy danych Podstawy języka SQL

SQL (ang. Structured Query Language)

Konstruowanie Baz Danych SQL UNION, INTERSECT, EXCEPT

Autor: Joanna Karwowska

Relacyjne bazy danych. Podstawy SQL

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

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

Autor: Joanna Karwowska

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

Relacyjne bazy danych. Podstawy SQL

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

SQL do zaawansowanych analiz danych część 1.

Systemy GIS Tworzenie zapytań w bazach danych

SQL praca z tabelami 4. Wykład 7

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

Wstęp do SQL. copyright: KGiIS WGGiOŚ AGH

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

Informatyka (5) SQL. dr inż. Katarzyna Palikowska Katedra Transportu Szynowego p. 4 Hydro

Bazy danych. Andrzej Grzybowski. Instytut Fizyki, Uniwersytet Śląski

BAZY DANYCH wprowadzenie do języka SQL. Opracował: dr inż. Piotr Suchomski

Szkolenie Oracle SQL podstawy. Terminy lutego 2010 First Minute! 1100zł!

Wykład 05 Bazy danych

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

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

Bazy danych. dr inż. Arkadiusz Mirakowski

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

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

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

Grupowanie i funkcje agregujące

Wykład 6. SQL praca z tabelami 3

Przykłady najlepiej wykonywać od razu na bazie i eksperymentować z nimi.

Grupowanie i funkcje agregacji

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

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

Bazy danych SQL Server 2005

Wykład 5. SQL praca z tabelami 2

Zaawansowany SQL. Robert A. Kłopotek Wydział Matematyczno-Przyrodniczy. Szkoła Nauk Ścisłych, UKSW

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Podstawowe zapytania SELECT (na jednej tabeli)

Bazy Danych - Instrukcja do Ćwiczenia laboratoryjnego nr 8

Podstawy języka SQL. SQL Structured Query Languagestrukturalny

Podstawy języka SQL cz. 2

Wprowadzenie do języka SQL

Jerzy Nawrocki, Wprowadzenie do informatyki

Zadania z SQLa (MS SQL Server)

Bazy danych. Andrzej Łachwa, UJ, /15

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

Paweł Rajba

Bazy danych wykład trzeci. Konrad Zdanowski

strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych

LAB 3 (część 1 Projektu)

Język SQL. Rozdział 7. Zaawansowane mechanizmy w zapytaniach

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

PODZAPYTANIE (SUBSELECT)

Grupowanie i funkcje agregacji. Grupowanie z użyciem rollup

Ćwiczenie zapytań języka bazy danych PostgreSQL

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

Widok Connections po utworzeniu połączenia. Obszar roboczy

Język SQL podstawy zapytań

ACESS- zadania z wykorzystaniem poleceń SQL

Język SQL. Rozdział 2. Proste zapytania

Ćwiczenie 3 funkcje agregujące

Język SQL, zajęcia nr 2

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

Perspektywy Stosowanie perspektyw, tworzenie perspektyw prostych i złożonych, perspektywy modyfikowalne i niemodyfikowalne, perspektywy wbudowane.

Kolekcje Zbiory obiektów, rodzaje: tablica o zmiennym rozmiarze (ang. varray) (1) (2) (3) (4) (5) Rozszerzenie obiektowe w SZBD Oracle

Podstawy języka SQL. standardy SQL formułowanie zapytań operacje na strukturach danych manipulowanie danymi. Bazy danych s.5-1

Zaawansowane bazy danych i hurtownie danych studia zaoczne II stopnia, sem. I

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

Szkolenie autoryzowane. MS Tworzenie zapytań do Microsoft SQL Server Strona szkolenia Terminy szkolenia Rejestracja na szkolenie Promocje

P o d s t a w y j ę z y k a S Q L

Klasyczna Analiza Danych

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

Podyplomowe Studia Systemy informatyczne w logistyce

Bazy danych. Bazy danych. Zapytania SELECT. Dr inż. Paweł Kasprowski.

SELECT * FROM tabela WHERE warunek wybiera dane spełniające podany warunek

77. Modelowanie bazy danych rodzaje połączeń relacyjnych, pojęcie klucza obcego.

Zagadnienia podstawowe

Model relacyjny. Wykład II

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

Bazy danych - Materiały do laboratoriów IV

T-SQL dla każdego / Alison Balter. Gliwice, cop Spis treści. O autorce 11. Dedykacja 12. Podziękowania 12. Wstęp 15

Laboratorium Bazy danych SQL 3 1

Technologie baz danych

Optymalizacja poleceń SQL Metody dostępu do danych

Język SQL, zajęcia nr 1

Autor: Joanna Karwowska

Kurs. Podstawy MySQL

Podstawy języka T-SQL : Microsoft SQL Server 2016 i Azure SQL Database / Itzik Ben-Gan. Warszawa, Spis treści

Język SQL Złączenia. Laboratorium. Akademia Morska w Gdyni

Microsoft SQL Server Podstawy T-SQL

Współczesne systemy baz danych

DMX DMX DMX DMX: CREATE MINING STRUCTURE. Tadeusz Pankowski

Transkrypt:

Agregacja w SQL 1 Bazy Danych Wykład p.t. Agregacja i Grupowanie Danych Funkcje Agregacji. Opcje GROUP BY oraz HAVING Antoni Ligęza ligeza@agh.edu.pl http://galaxy.uci.agh.edu.pl/~ligeza Wykorzystano materiały: http: //www.postgresql.org/docs/8.3/interactive/index.html

Agregacja w SQL 2 Komendy SQL: SELECT Command: SELECT Description: retrieve rows from a table or view SELECT [ ALL DISTINCT [ ON ( expression [,...] ) ] ] * expression [ AS output_name ] [,...] [ FROM from_item [,...] ] [ WHERE condition ] [ GROUP BY expression [,...] ] [ HAVING condition [,...] ] [ { UNION INTERSECT EXCEPT } [ ALL ] select ] [ ORDER BY expression [ ASC DESC USING operator ] [,...] ] [ LIMIT { count ALL } ] [ OFFSET start ] [ FOR { UPDATE SHARE } [ OF table_name [,...] ] [ NOWAIT ] [...] ] where from_item can be one of: [ ONLY ] table_name [ * ] [ [ AS ] alias [ ( column_alias [,...] ) ] ] ( select ) [ AS ] alias [ ( column_alias [,...] ) ] function_name ( [ argument [,...] ] ) [ AS ] alias [ ( column_alias [,...] column_definition [,...] ) ] function_name ( [ argument [,...] ] ) AS ( column_definition [,...] ) from_item [ NATURAL ] join_type from_item [ ON join_condition USING ( join_column [,...] ) ]

Agregacja w SQL 3 Prosta agregacja SUM suma. AVG średnia. COUNT(*) zliczanie rekordów. pracownicy=> SELECT SUM(pobory) AS suma, AVG(POBORY) as średnia, COUNT(*) as liczba FROM prac; suma średnia liczba ----------+-----------------------+-------- 19500.00 2437.5000000000000000 9 pracownicy=> SELECT SUM(pobory) AS suma, round(avg(pobory),2) as średnia, COUNT(*) as liczba FROM prac; suma średnia liczba ----------+----------+-------- 19500.00 2437.50 9

Agregacja w SQL 4 Operacje agregacji i grupowania Agregacja: łączenie danych z wielu rekordów, zwykle znacząco redukuje liczbę rekordów, możliwe zliczanie rekordów, dotyczy danych numerycznych, umożliwia wyliczanie wartości zdefiniowanych funkcji, działa również w przypadku wartości NULL, tracone są dane indywidualne. Grupowanie: możliwe jest tworzenie grup na poziomie: całej tabeli jedna grupa; grupy w tabeli jeden stopień grupowania, grupy z podgrupami grupowanie dwustopniowe, grupowanie hierarchiczne. możliwa jest eliminacja grup, możliwe jest zliczanie rekordów w grupach, możliwe jest porządkowanie wg parametrów grup, parametry definiujące grupy mogą być wyświetlane.

Agregacja w SQL 5 Funkcje agregacji AVG(<exp>) Średnia z wartości wyrażenia <exp>, COUNT(<exp>) Liczba wierszy dla których <exp> nie jest NULL, COUNT( ) Liczba wszystkich wierszy, COUNT(DISTINCT(<exp>)) Liczba wszystkich wierszydla których wartość <exp> jest różna, MAX(<exp>) Maksymalna wartość <exp>, MIN(<exp>) Minimalna wartość <exp>, STDDEV(<exp>) Odchylenie standardowe dla <exp>, SUM(<exp>) Suma wartości <exp>, VARIANCE(<exp>) Wariancja dla <exp>.

Agregacja w SQL 6 Typowe przykłady prostej agregacji -------+------------+----------+-------+------------+--------- pracownicy=> SELECT * FROM tpra; id nazwisko imie dzial stanowisko pobory 1100 Kowal Adam PD303 robotnik 1500.00 110 Kowalik Artur PD303 kierownik 1500.00 1110 Kowalewski Adam PR202 robotnik 3500.00 101 Kowalczyk Amadeusz PK101 kierownik 1000.00 1101 Kowalski Antoni PD303 robotnik 4500.00 1011 Kowalowski Alojzy PK101 robotnik 2500.00 111 Kowalczuk Adam PR202 kierownik 2500.00 1010 Kawula Alojzy PK101 robotnik 2500.00 102 Janiak Jerzy PK101 analityk 6000.00 (9 rows) pracownicy=> SELECT AVG(pobory) FROM tpra; avg ----------------------- 2833.3333333333333333 pracownicy=> SELECT round(avg(pobory),2) FROM tpra; round --------- 2833.33

Agregacja w SQL 7 Typowe przykłady Dwa i więcej agregatów: pracownicy=> SELECT sum(pobory), round(avg(pobory),2) FROM tpra; sum round ----------+--------- 25500.00 2833.33 pracownicy=> SELECT sum(pobory), round(avg(pobory),2), count(*) FROM tpra; sum round count ----------+---------+------- 25500.00 2833.33 9 Deklaracja nazw kolumn agregatów: pracownicy=> SELECT sum(pobory) AS SUMA, round(avg(pobory),2) AS SREDNIA, count(*) AS LICZBA FROM tpra; suma srednia liczba ----------+---------+-------- 25500.00 2833.33 9

Agregacja w SQL 8 Użycie COUNT COUNT(*) wszystkie rekordy, COUNT(atrybut) wszystkie różne od NULL, COUNT(DISTINCT(atrybut)) wszystkie różne od siebie i od NULL. pracownicy=> select * from tpra; id nazwisko imie dzial stanowisko pobory -------+------------+----------+-------+------------+--------- 110 Kowalik Artur PD303 kierownik 1500.00 101 Kowalczyk Amadeusz PK101 kierownik 1000.00 1101 Kowalski Antoni PD303 robotnik 4500.00 1011 Kowalowski Alojzy PK101 robotnik 2500.00 1010 Kawula Alojzy PK101 robotnik 2500.00 102 Janiak Jerzy PK101 analityk 6000.00 1100 Kowal PD303 robotnik 1500.00 1110 Kowalewski PR202 robotnik 3500.00 111 Kowalczuk PR202 kierownik 2500.00 (9 rows) pracownicy=> SELECT COUNT(*) FROM tpra; count ------- 9 pracownicy=> SELECT COUNT(imie) FROM tpra; count ------- 6 pracownicy=> SELECT COUNT(DISTINCT(imie)) FROM tpra; count ------- 5

Agregacja w SQL 9 Agregacja z WHERE -------+------------+----------+-------+------------+--------- pracownicy=> select * from tpra; id nazwisko imie dzial stanowisko pobory 110 Kowalik Artur PD303 kierownik 1500.00 101 Kowalczyk Amadeusz PK101 kierownik 1000.00 1101 Kowalski Antoni PD303 robotnik 4500.00 1011 Kowalowski Alojzy PK101 robotnik 2500.00 1010 Kawula Alojzy PK101 robotnik 2500.00 102 Janiak Jerzy PK101 analityk 6000.00 1100 Kowal PD303 robotnik 1500.00 1110 Kowalewski PR202 robotnik 3500.00 111 Kowalczuk PR202 kierownik 2500.00 (9 rows) SELECT sum(pobory) AS SUMA, round(avg(pobory),2) AS SREDNIA, count(*) AS LICZBA FROM tpra WHERE stanowisko <> robotnik ; suma srednia liczba ----------+---------+-------- 11000.00 2750.00 4 pracownicy=> SELECT sum(pobory) AS SUMA, round(avg(pobory),2) AS SREDNIA, count(*) AS LICZBA FROM tpra WHERE dzial= PD303 ; suma srednia liczba ---------+---------+-------- 7500.00 2500.00 3

Agregacja w SQL 10 Grupowanie GROUP BY GROUP BY <exp> grupowanie jednostopniowe -------+------------+----------+-------+------------+--------- pracownicy=> SELECT * FROM tpra; id nazwisko imie dzial stanowisko pobory 110 Kowalik Artur PD303 kierownik 1500.00 101 Kowalczyk Amadeusz PK101 kierownik 1000.00 1101 Kowalski Antoni PD303 robotnik 4500.00 1011 Kowalowski Alojzy PK101 robotnik 2500.00 1010 Kawula Alojzy PK101 robotnik 2500.00 102 Janiak Jerzy PK101 analityk 6000.00 1100 Kowal PD303 robotnik 1500.00 1110 Kowalewski PR202 robotnik 3500.00 111 Kowalczuk PR202 kierownik 2500.00 (9 rows) Tworzymy grupę (np. pracownicy z jednego działu) za pomocą WHERE: pracownicy=> SELECT SUM(pobory), ROUND(AVG(pobory),2), COUNT(*) FROM tpra WHERE dzial= PK101 ; sum round count ----------+---------+------- 12000.00 3000.00 4

Agregacja w SQL 11 Trzy grupy trzy działy pracownicy=> SELECT DISTINCT dzial FROM tpra; dzial ------- PD303 PK101 PR202 pracownicy=> SELECT SUM(pobory), ROUND(AVG(pobory),2), COUNT(*) FROM tpra WHERE dzial= PK101 ; sum round count ----------+---------+------- 12000.00 3000.00 4 pracownicy=> SELECT SUM(pobory), ROUND(AVG(pobory),2), COUNT(*) FROM tpra WHERE dzial= PR202 ; sum round count ---------+---------+------- 6000.00 3000.00 2 pracownicy=> SELECT SUM(pobory), ROUND(AVG(pobory),2), COUNT(*) FROM tpra WHERE dzial= PD303 ; sum round count ---------+---------+------- 7500.00 2500.00 3

Agregacja w SQL 12 Jawne grupowanie pracownicy=> SELECT SUM(pobory), ROUND(AVG(pobory),2), COUNT(*) FROM tpra GROUP BY dzial; sum round count ----------+---------+------- 12000.00 3000.00 4 6000.00 3000.00 2 7500.00 2500.00 3 Można tu podać parametr grupowania jest stały w grupie. pracownicy=> SELECT dzial, SUM(pobory), ROUND(AVG(pobory),2), COUNT(*) FROM tpra GROUP BY dzial; dzial sum round count -------+----------+---------+------- PR202 6000.00 3000.00 2 PD303 7500.00 2500.00 3

Agregacja w SQL 13 Grupowanie z ORDER BY pracownicy=> SELECT dzial, SUM(pobory), ROUND(AVG(pobory),2), COUNT(*) FROM tpra GROUP BY dzial; dzial sum round count -------+----------+---------+------- PR202 6000.00 3000.00 2 PD303 7500.00 2500.00 3 pracownicy=> SELECT dzial, SUM(pobory), ROUND(AVG(pobory),2), COUNT(*) FROM tpra GROUP BY dzial ORDER BY dzial; dzial sum round count -------+----------+---------+------- PD303 7500.00 2500.00 3 PR202 6000.00 3000.00 2 pracownicy=> SELECT dzial, SUM(pobory), ROUND(AVG(pobory),2), COUNT(*) FROM tpra GROUP BY dzial ORDER BY ROUND(AVG(pobory),2); dzial sum round count -------+----------+---------+------- PD303 7500.00 2500.00 3 PR202 6000.00 3000.00 2

Agregacja w SQL 14 Grupowanie z ORDER BY; nazwy i pozycje kolumn pracownicy=> SELECT dzial, SUM(pobory) AS suma, COUNT(*) AS liczba FROM tpra GROUP BY dzial ORDER BY srednia,suma; dzial suma srednia liczba -------+----------+---------+-------- PD303 7500.00 2500.00 3 PR202 6000.00 3000.00 2 pracownicy=> SELECT dzial, SUM(pobory) AS suma, COUNT(*) AS liczba FROM tpra GROUP BY dzial ORDER BY 3 DESC, 2 ASC; dzial suma srednia liczba -------+----------+---------+-------- PR202 6000.00 3000.00 2 PD303 7500.00 2500.00 3

Agregacja w SQL 15 HAVING selekcja grup pracownicy=> SELECT dzial, SUM(pobory) AS suma, COUNT(*) AS liczba FROM tpra GROUP BY dzial; dzial suma srednia liczba -------+----------+---------+-------- PR202 6000.00 3000.00 2 PD303 7500.00 2500.00 3 pracownicy=> SELECT dzial, SUM(pobory) AS suma, COUNT(*) AS liczba FROM tpra GROUP BY dzial HAVING COUNT(*) > 2; dzial suma srednia liczba -------+----------+---------+-------- PD303 7500.00 2500.00 3 (2 rows)

Agregacja w SQL 16 HAVING a WHERE WHERE działa na poziomie pojedynczych rekordów, HAVING działa na poziomie agregatów (grup). pracownicy=> SELECT dzial, SUM(pobory) AS suma, COUNT(*) AS liczba FROM tpra GROUP BY dzial; dzial suma srednia liczba -------+----------+---------+-------- PR202 6000.00 3000.00 2 PD303 7500.00 2500.00 3 pracownicy=> SELECT dzial, SUM(pobory) AS suma, COUNT(*) AS liczba FROM tpra WHERE stanowisko <> kierownik GROUP BY dzial; dzial suma srednia liczba -------+----------+---------+-------- PK101 11000.00 3666.67 3 PR202 3500.00 3500.00 1 PD303 6000.00 3000.00 2

Agregacja w SQL 17 HAVING a WHERE pracownicy=> SELECT dzial, SUM(pobory) AS suma, COUNT(*) AS liczba FROM tpra GROUP BY dzial HAVING AVG(pobory) > 2500; dzial suma srednia liczba -------+----------+---------+-------- PR202 6000.00 3000.00 2 (2 rows) pracownicy=> SELECT dzial, SUM(pobory) AS suma, COUNT(*) AS liczba FROM tpra GROUP BY dzial HAVING AVG(pobory) > 3000; dzial suma srednia liczba -------+------+---------+-------- (0 rows) pracownicy=> SELECT dzial, SUM(pobory) AS suma, COUNT(*) AS liczba FROM tpra WHERE stanowisko <> kierownik GROUP BY dzial HAVING AVG(pobory) > 3000; dzial suma srednia liczba -------+----------+---------+-------- PK101 11000.00 3666.67 3 PR202 3500.00 3500.00 1 (2 rows)

Agregacja w SQL 18 Grupowanie dwustopniowe wstęp pracownicy=> SELECT dzial, SUM(pobory) AS suma, COUNT(*) AS liczba FROM tpra GROUP BY dzial; dzial suma srednia liczba -------+----------+---------+-------- PR202 6000.00 3000.00 2 PD303 7500.00 2500.00 3 pracownicy=> SELECT stanowisko, SUM(pobory) AS suma, COUNT(*) AS liczba FROM tpra GROUP BY stanowisko; stanowisko suma srednia liczba ------------+----------+---------+-------- robotnik 14500.00 2900.00 5 kierownik 5000.00 1666.67 3 analityk 6000.00 6000.00 1

Agregacja w SQL 19 Grupowanie dwustopniowe pracownicy=> SELECT dzial, stanowisko, SUM(pobory) AS suma, COUNT(*) AS liczba FROM tpra GROUP BY dzial, stanowisko; dzial stanowisko suma srednia liczba -------+------------+---------+---------+-------- PR202 robotnik 3500.00 3500.00 1 PK101 analityk 6000.00 6000.00 1 PK101 kierownik 1000.00 1000.00 1 PD303 kierownik 1500.00 1500.00 1 PK101 robotnik 5000.00 2500.00 2 PD303 robotnik 6000.00 3000.00 2 PR202 kierownik 2500.00 2500.00 1 (7 rows) pracownicy=> SELECT dzial, stanowisko, SUM(pobory) AS suma, COUNT(*) AS liczba FROM tpra GROUP BY stanowisko,dzial; dzial stanowisko suma srednia liczba -------+------------+---------+---------+-------- PR202 robotnik 3500.00 3500.00 1 PK101 analityk 6000.00 6000.00 1 PK101 kierownik 1000.00 1000.00 1 PD303 robotnik 6000.00 3000.00 2 PR202 kierownik 2500.00 2500.00 1 PD303 kierownik 1500.00 1500.00 1 PK101 robotnik 5000.00 2500.00 2 (7 rows)

Agregacja w SQL 20 Grupowanie dwustopniowe z odrzucaniem grup jednostkowych pracownicy=> SELECT dzial, stanowisko, SUM(pobory) AS suma, COUNT(*) AS liczba FROM tpra GROUP BY dzial, stanowisko HAVING COUNT(*) > 1; dzial stanowisko suma srednia liczba -------+------------+---------+---------+-------- PK101 robotnik 5000.00 2500.00 2 PD303 robotnik 6000.00 3000.00 2 (2 rows) pracownicy=> SELECT dzial, stanowisko, SUM(pobory) AS suma, COUNT(*) AS liczba FROM tpra GROUP BY stanowisko, dzial HAVING COUNT(*) > 1; dzial stanowisko suma srednia liczba -------+------------+---------+---------+-------- PD303 robotnik 6000.00 3000.00 2 PK101 robotnik 5000.00 2500.00 2 (2 rows)

Agregacja w SQL 21 GROUP BY + NULL -------+------------+----------+-------+------------+--------- pracownicy=> SELECT * FROM tpra; id nazwisko imie dzial stanowisko pobory 110 Kowalik Artur PD303 kierownik 1500.00 101 Kowalczyk Amadeusz PK101 kierownik 1000.00 1101 Kowalski Antoni PD303 robotnik 4500.00 1011 Kowalowski Alojzy PK101 robotnik 2500.00 1010 Kawula Alojzy PK101 robotnik 2500.00 102 Janiak Jerzy PK101 analityk 6000.00 1100 Kowal PD303 robotnik 1500.00 1110 Kowalewski PR202 robotnik 3500.00 111 Kowalczuk PR202 kierownik 2500.00 (9 rows) pracownicy=> SELECT imie, count(*) FROM tpra GROUP BY imie; imie count ----------+------- 3 Alojzy 2 Jerzy 1 Antoni 1 Artur 1 Amadeusz 1 (6 rows)