Część zapytania SELECT, które dzieli wyniki zapytania na grupy rekordów, zwykle na potrzeby wykorzystania funkcji agregujących. Zwracany jest jeden wiersz dla każdej grupy. Group by łączy wartości NULL w jedną grupę.
select Stanowisko, ID_Oddz
from pracownicy
group by Stanowisko, ID_Oddz
GROUP BY ROLLUP rozwija wynik na wszystkie kombinacje wyników z podzbiorów i na końcu przedstawia sumy pośrednie i sumę końcową wyników
select Stanowisko, ID_Oddz, SUM(Placa_Pod)
from pracownicy
group by ROLLUP(Stanowisko, ID_Oddz)
GROUP BY CUBE wypisuje wszystkie kombinacje wartośći parametrów łącznie z NULL.
select Stanowisko, ID_Oddz, SUM(Placa_Pod)
from pracownicy
group by CUBE(Stanowisko, ID_Oddz)
GROUP BY GROUPING SETS pozwala łączyć wiele grup group by w jedną:
select Stanowisko, ID_Oddz, SUM(Placa_Pod)
from pracownicy
group by GROUPING SETS (CUBE(Stanowisko, ID_Oddz),ROLLUP(Stanowisko, ID_Oddz))
GROUP BY () dodaje dodatkowo grupę generującą sumaryczną wartość
SELECT ID_ODdz, SUM(Placa_pod) AS TotalSales
FROM Pracownicy
GROUP BY GROUPING SETS ( Id_Oddz, () )
Inne, użycie funkcji wierszowej:
SELECT DATEPART(yyyy,Zatrudniony) AS OD_KIEDY
,SUM(Placa_pod) AS N'Total Zarobki Amount'
FROM Pracownicy
GROUP BY DATEPART(yyyy,Zatrudniony)
ORDER BY DATEPART(yyyy,Zatrudniony);
HAVING Pozwala określić, które ze zgrupowanych rekoródów przez GROUP BY mają być wyświetlone przykład:
select Max(Placa_pod), ID_Oddz
from pracownicy
where Placa_pod < 4000
group by ID_Oddz
Having Max(Placa_pod) < 4000
WHERE definiuje które wiersze mają być pominięte przed grupowaniem, HAVING określa które grupy nas interesują.
Służy do ograniczenia wyświetlania liczby wierszy zapytania do określonej liczby.
SELECT TOP(2) Nazwisko
from Pracownicy
ORDER BY NAZWISKO DESC
UWAGA! W order by możemy korzystać z nazw aliasów, lub też wskazywać kolumny po numerach
Przykład:
SELECT Nazwisko as NAZ, Placa_pod as kasa
from Pracownicy
ORDER BY naz
SELECT Nazwisko as NAZ, Placa_pod as kasa
from Pracownicy
ORDER BY kasa
SELECT Nazwisko as NAZ, Placa_pod as kasa
from Pracownicy
ORDER BY 1
SELECT Nazwisko as NAZ, Placa_pod as kasa
from Pracownicy
ORDER BY 2
Funkcje grupowe (agregujące) operują na wartościach wielu rekordów zwracając pojedynczą wartość. Nie licząc funkcji COUNT pomijają one wartości NULL. Używane są zazwyczaj w sekcji GROUP BY.
Zwraca średnią arytmetyczną.
Składnia:
AVG ( [ ALL | DISTINCT ] expression )
OVER ( [ partition_by_clause ] order_by_clause )
select
AVG(PLACA_pod)
from
pracownicy
where
id_Oddz = 20
select
AVG(PLACA_pod)
from
pracownicy
Group by
ID_Oddz
select
AVG(DISTINCT ID_oddz)
from
pracownicy
select
ID_Oddz, Placa_pod, AVG(Placa_pod) OVER (Partition by ID_oddz) as srednia_w_oddziale
from
pracownicy
select
ID_Oddz, Placa_pod, AVG(Placa_pod) OVER (Partition by ID_oddz ORDER BY Placa_pod) as srednia_w_oddziale_rosnaco
from
pracownicy
Zwracają minimalną lub maksymalną wartość z danego zbioru, może być używane dla danych liczbowych, znakowych, dat.
select MAX(NAzwisko), ID_Oddz
from pracownicy
Group by ID_Oddz
Zwraca sumę wartości danych ze zbioru, działa tylko na danych liczbowych
select SUM(Placa_pod), ID_Oddz
from pracownicy
Group by ID_Oddz
Zwraca liczbę krotek w grupie (w tym wartości null). W przypadku podania wartości zliczane są unikalne wartości danego typu, gdy chcemy zliczyć wszystkie krotki wpisujemy '*'.
COUNT_BIG działa jak COUNT tylko zwraca BIGINT jako wynik.
select count(*)
from pracownicy
select count(Nazwisko)
from pracownicy
Where nazwisko like '[ABC]%'
select count(*), MAX(Placa_pod)
from pracownicy
group by ID_Oddz
SELECT DISTINCT ID_Oddz
, MIN(Placa_pod) OVER (PARTITION BY ID_Oddz) AS MinSalary
, MAX(Placa_pod) OVER (PARTITION BY ID_Oddz) AS MaxSalary
, AVG(Placa_pod) OVER (PARTITION BY ID_Oddz) AS AvgSalary
,COUNT(*) OVER (PARTITION BY ID_Oddz) AS EmployeesPerDept
from PRACOWNICY
Zadanie Domowe
Termin wykonania zadania: Sobota 29.10.2017 do godziny 24.00.
Wykonać zadania 2,5,8,12,13
Rozwiązania proszę przesłać przez stronę:
Logujemy się jak na komputery Wydziałowe, przesyłamy plik (jeden wspólny dla wszystkich) z rozwiązaniami.
UWAGA! Rozwiązania można przesłać tylko raz.
Wykorzystano materiały z
http://www.sql-kursy.pl/ms-sql-kurs-funkcje-agregujace-group-by-5.html