Funkcje agregujące i grupujące w SQL.
Pracując z bazami danych często pojawiają się potrzeby by policzyć np przychód, ilość
sprzedanego towaru, średnią kwotę zadłużenia itd. T-SQL posiada wiele funkcji
pozwalających na w/w działania na początek omówię funkcje COUNT
Tabela 4.
miesiac koszty
styczeń 30 zł
styczeń 30 zł
luty
450 zł
marzec 50 zł
kwiecień 600 zł
Użycie funkcji COUNT w MSSQL
1
2
3
4
5
6
7
8
SELECT
count(koszty),
miesiac
FROM
t_dane
group
by
miesiac
go
Jeśli tabela 4. to nasz baza danych, a użyjemy powyższego zapytania to wynikiem będzie:
2
styczeń
1
luty
1
marzec
1
kwiecień
Funkcja COUNT liczy wystąpienia bazie danych w tym przypadku dla stycznia koszty
wystąpiły dwa razy dla pozostałych miesięcy tylko raz, w klauzuli group by wskazujemy
poczym mają być grupowane dane. Jeśli użyli byśmy w powyższym zapytaniu zaraz za
SELECT DISTINCT wynik byłby dla stycznia 1 ponieważ DISTINCT nakazuje eliminacje
identycznych rekordów.
1
2
3
4
5
6
SELECT
DISTINCT
count(koszty),
miesiac
FROM
t_dane
group
by
miesiac
Możemy również użyć COUNT(slect distinct koszty) ma takie samo działanie jak poprzednie
zapytanie jednak tu eliminowane są duplikaty tylko w jednej kolumnie koszty.
Użycie funkcji SUM i AVG w MS SQL
1
2
3
4
5
6
SELECT
sum(koszty),
miesiac
FROM
t_dane
group
by
miesiac
Funkcja SUM pozwala na sumowanie kosztów dla poszczególnych miesięcy, wynikiem tego
zapytania będzie 60 zł dla stycznia.
1
2
3
4
5
6
SELECT
AVG(koszty),
miesiac
FROM
t_dane
group
by
miesiac
Funkcja AVG pozwala obliczyć średni koszt dla poszczególnych miesięcy
Rozbuduje trochę naszą tabele 4.
miesiac koszty
styczeń 10 zł
styczeń 30 zł
styczeń 450 zł
luty
50 zł
luty
600 zł
Użcie funkcji MAX i MIN w MS SQL
1
2
3
4
5
6
7
SELECT
max(koszty) as
max,
min(koszty) as
min,
miesiac
FROM
t_dane
group
by
miesiac
Funkcja max i min pozwala na wybranie maksymalnych i minimalnych wartości naszych
danych pogrupowanych po miesiącach, użyłem tu polecenia AS, pozwala ono na nazwanie
kolumny w wyświetlanym wyniku
Wynik w/w zapytania t-sql działania funkcji max, min
miesiac max min
styczeń
450
zł
10 zł
luty
600 50 zł
Użycie kaluzuli HAVING w MS SQL
HAVING Pozwala określić, które ze zgrupowanych rekoródów przez GROUP BY mają być
wyświetlone przykład:
1
2
3
4
SELECT
miesiac, SUM(koszty)
FROM
t_dane
GROUP
BY
miesiac
HAVING
SUM(koszty) > 1000
W tym przykładzie za pomocą HAVING w t-sql wykluczamy miesiące w których suma
kosztów była niższa niż 100, możemy użyć również innych funkcji agregujących w celu
wykluczenia lub wybrania rekordów
select
OrderID
,
CustomerID
,
DateDiff
(
dd
,
ShippedDate
,
RequiredDate
)
'ilosc dni'
From
Orders
Lub
select
OrderID
,
CustomerID
,
CAST
(
RequiredDate
-
ShippedDate
AS
INT
)
'ilosc dni'
From
Orders
SELECT
distinct
Cast
(
productname
as
nvarchar
(
1
))
as
'litera'
,
Count
(
'litera'
)
FROM
Products
group
by
Cast
(
productname
as
nvarchar
(
1
))