SQL
Funkcje (agregat)
Szukaj…
Składnia
- Funkcja (wyrażenie [ DISTINCT ]) -DISTINCT jest parametrem opcjonalnym
- AVG (wyrażenie [ALL | DISTINCT])
- COUNT ({[WSZYSTKO | DISTINCT] wyrażenie] | * *))
- Grupowanie (<wyrażenie kolumny>)
- MAX (wyrażenie [ALL | DISTINCT])
- MIN (wyrażenie [ALL | DISTINCT])
- SUMA (wyrażenie [ALL | DISTINCT])
- VAR (wyrażenie [ALL | DISTINCT])
OVER ([podział_klucza] kolejność_klucza) - VARP (wyrażenie [ALL | DISTINCT])
OVER ([podział_klucza] kolejność_klucza - STDEV (wyrażenie [ALL | DISTINCT])
OVER ([podział_klucza] kolejność_klucza) - STDEVP (wyrażenie [ALL | DISTINCT])
OVER ([podział_klucza] kolejność_klucza)
Uwagi
W zarządzaniu bazą danych funkcja agregująca jest funkcją, w której wartości wielu wierszy są grupowane jako dane wejściowe według określonych kryteriów, aby utworzyć pojedynczą wartość o bardziej znaczącym znaczeniu lub pomiarze, taką jak zestaw, torba lub lista.
MIN returns the smallest value in a given column
MAX returns the largest value in a given column
SUM returns the sum of the numeric values in a given column
AVG returns the average value of a given column
COUNT returns the total number of values in a given column
COUNT(*) returns the number of rows in a table
GROUPING Is a column or an expression that contains a column in a GROUP BY clause.
STDEV returns the statistical standard deviation of all values in the specified expression.
STDEVP returns the statistical standard deviation for the population for all values in the specified expression.
VAR returns the statistical variance of all values in the specified expression. may be followed by the OVER clause.
VARP returns the statistical variance for the population for all values in the specified expression.
Funkcje agregujące służą do obliczania „zwróconej kolumny danych liczbowych” z instrukcji
SELECT
. Zasadniczo podsumowują wyniki konkretnej kolumny wybranych danych. - SQLCourse2.com
Wszystkie funkcje agregujące ignorują wartości NULL.
SUMA
Sum
funkcja suma wartości wszystkich wierszy w grupie. Jeśli grupa według klauzuli zostanie pominięta, sumuje wszystkie wiersze.
select sum(salary) TotalSalary
from employees;
Całkowite wynagrodzenie |
---|
2500 |
select DepartmentId, sum(salary) TotalSalary
from employees
group by DepartmentId;
DepartmentId | Całkowite wynagrodzenie |
---|---|
1 | 2000 |
2) | 500 |
Agregacja warunkowa
Tabela płatności
Klient | Typ płatności | Ilość |
---|---|---|
Piotr | Kredyt | 100 |
Piotr | Kredyt | 300 |
Jan | Kredyt | 1000 |
Jan | Obciążyć | 500 |
select customer,
sum(case when payment_type = 'credit' then amount else 0 end) as credit,
sum(case when payment_type = 'debit' then amount else 0 end) as debit
from payments
group by customer
Wynik:
Klient | Kredyt | Obciążyć |
---|---|---|
Piotr | 400 | 0 |
Jan | 1000 | 500 |
select customer,
sum(case when payment_type = 'credit' then 1 else 0 end) as credit_transaction_count,
sum(case when payment_type = 'debit' then 1 else 0 end) as debit_transaction_count
from payments
group by customer
Wynik:
Klient | liczba_transakcji kredytowej | debit_transaction_count |
---|---|---|
Piotr | 2) | 0 |
Jan | 1 | 1 |
AVG ()
Funkcja agregująca AVG () zwraca średnią danego wyrażenia, zwykle wartości liczbowe w kolumnie. Załóżmy, że mamy tabelę zawierającą roczne obliczenia liczby ludności w miastach na całym świecie. Rekordy dla Nowego Jorku wyglądają podobnie do poniższych:
PRZYKŁADOWA TABELA
Nazwa miasta | populacja | rok |
---|---|---|
Nowy Jork | 8.550.405 | 2015 r |
Nowy Jork | ... | ... |
Nowy Jork | 8 000 906 | 2005 |
Aby wybrać średnią populację Nowego Jorku, USA, z tabeli zawierającej nazwy miast, pomiary populacji i lata pomiaru za ostatnie dziesięć lat:
PYTANIE
select city_name, AVG(population) avg_population
from city_population
where city_name = 'NEW YORK CITY';
Zauważ, że w zapytaniu nie ma roku pomiaru, ponieważ populacja jest uśredniana w czasie.
WYNIKI
Nazwa miasta | śr. populacja |
---|---|
Nowy Jork | 8 250 754 |
Uwaga: Funkcja AVG () konwertuje wartości na typy numeryczne. Jest to szczególnie ważne, o czym należy pamiętać podczas pracy z datami.
Łączenie list
Częściowe uznanie dla tej odpowiedzi SO.
Lista konkatenacji agreguje kolumnę lub wyrażenie, łącząc wartości w jednym ciągu dla każdej grupy. Można określić ciąg ograniczający każdą wartość (pusty lub przecinek, gdy zostanie pominięty) oraz kolejność wartości w wyniku. Chociaż nie jest to część standardu SQL, każdy główny dostawca relacyjnych baz danych obsługuje go na swój sposób.
MySQL
SELECT ColumnA
, GROUP_CONCAT(ColumnB ORDER BY ColumnB SEPARATOR ',') AS ColumnBs
FROM TableName
GROUP BY ColumnA
ORDER BY ColumnA;
Oracle i DB2
SELECT ColumnA
, LISTAGG(ColumnB, ',') WITHIN GROUP (ORDER BY ColumnB) AS ColumnBs
FROM TableName
GROUP BY ColumnA
ORDER BY ColumnA;
PostgreSQL
SELECT ColumnA
, STRING_AGG(ColumnB, ',' ORDER BY ColumnB) AS ColumnBs
FROM TableName
GROUP BY ColumnA
ORDER BY ColumnA;
SQL Server
SQL Server 2016 i wcześniejsze
(Włączono CTE, aby zachęcić do zasady DRY )
WITH CTE_TableName AS (
SELECT ColumnA, ColumnB
FROM TableName)
SELECT t0.ColumnA
, STUFF((
SELECT ',' + t1.ColumnB
FROM CTE_TableName t1
WHERE t1.ColumnA = t0.ColumnA
ORDER BY t1.ColumnB
FOR XML PATH('')), 1, 1, '') AS ColumnBs
FROM CTE_TableName t0
GROUP BY t0.ColumnA
ORDER BY ColumnA;
SQL Server 2017 i SQL Azure
SELECT ColumnA
, STRING_AGG(ColumnB, ',') WITHIN GROUP (ORDER BY ColumnB) AS ColumnBs
FROM TableName
GROUP BY ColumnA
ORDER BY ColumnA;
SQLite
bez zamówienia:
SELECT ColumnA
, GROUP_CONCAT(ColumnB, ',') AS ColumnBs
FROM TableName
GROUP BY ColumnA
ORDER BY ColumnA;
zamawianie wymaga podzapytania lub CTE:
WITH CTE_TableName AS (
SELECT ColumnA, ColumnB
FROM TableName
ORDER BY ColumnA, ColumnB)
SELECT ColumnA
, GROUP_CONCAT(ColumnB, ',') AS ColumnBs
FROM CTE_TableName
GROUP BY ColumnA
ORDER BY ColumnA;
Liczyć
Możesz policzyć liczbę wierszy:
SELECT count(*) TotalRows
FROM employees;
TotalRows |
---|
4 |
Lub policz pracowników według działu:
SELECT DepartmentId, count(*) NumEmployees
FROM employees
GROUP BY DepartmentId;
DepartmentId | NumEmployees |
---|---|
1 | 3) |
2) | 1 |
Możesz policzyć na kolumnie / wyrażeniu z efektem, który nie policzy wartości NULL
:
SELECT count(ManagerId) mgr
FROM EMPLOYEES;
mgr |
---|
3) |
(Jest jedna kolumna managerID o wartości null)
Możesz także użyć DISTINCT wewnątrz innej funkcji, takiej jak LICZBA, aby znaleźć tylko członków DISTINCT zestawu, na których będzie wykonywana operacja.
Na przykład:
SELECT COUNT(ContinentCode) AllCount
, COUNT(DISTINCT ContinentCode) SingleCount
FROM Countries;
Zwróci różne wartości. SingleCount będzie liczyć pojedyncze kontynenty tylko raz, podczas gdy AllCount będzie zawierać duplikaty.
ContinentCode |
---|
OC |
UE |
TAK JAK |
NA |
NA |
AF |
AF |
AllCount: 7 SingleCount: 5
Max
Znajdź maksymalną wartość kolumny:
select max(age) from employee;
Powyższy przykład zwróci największą wartość dla age
kolumny tabeli employee
.
Składnia:
SELECT MAX(column_name) FROM table_name;
Min
Znajdź najmniejszą wartość kolumny:
select min(age) from employee;
Powyższy przykład zwróci najmniejszą wartość dla age
kolumny tabeli employee
.
Składnia:
SELECT MIN(column_name) FROM table_name;