SQL
Funktionen (Aggregat)
Suche…
Syntax
- Funktion ([ DISTINCT ] Ausdruck) -DISTINCT ist ein optionaler Parameter
- AVG (Ausdruck [ALL | DISTINCT])
- COUNT ({[ALL | DISTINCT] Ausdruck] | *})
- GROUPING (<column_expression>)
- MAX (Ausdruck [ALL | DISTINCT])
- MIN (Ausdruck [ALL | DISTINCT])
- SUM (Ausdruck [ALL | DISTINCT])
- VAR (Ausdruck [ALL | DISTINCT])
OVER ([partition_by_clause] order_by_clause) - VARP ([ALL | DISTINCT] Ausdruck)
OVER ([partition_by_clause] order_by_clause - STDEV (Ausdruck [ALL | DISTINCT])
OVER ([partition_by_clause] order_by_clause) - STDEVP (Ausdruck [ALL | DISTINCT])
OVER ([partition_by_clause] order_by_clause)
Bemerkungen
In der Datenbankverwaltung ist eine Aggregatfunktion eine Funktion, bei der die Werte mehrerer Zeilen als Eingabe für bestimmte Kriterien gruppiert werden, um einen einzelnen Wert von größerer Bedeutung oder Messung zu bilden, beispielsweise eine Menge, ein Beutel oder eine Liste.
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.
Aggregatfunktionen werden zur Berechnung einer "zurückgegebenen Spalte numerischer Daten" aus Ihrer
SELECT
Anweisung verwendet. Sie fassen im Wesentlichen die Ergebnisse einer bestimmten Spalte ausgewählter Daten zusammen. - SQLCourse2.com
Alle Aggregatfunktionen ignorieren NULL-Werte.
SUMME
Sum
- Funktion den Wert aller Zeilen in der Gruppe zusammenzufassen. Wenn die group-by-Klausel weggelassen wird, summiert sie alle Zeilen.
select sum(salary) TotalSalary
from employees;
TotalSalary |
---|
2500 |
select DepartmentId, sum(salary) TotalSalary
from employees
group by DepartmentId;
DepartmentId | TotalSalary |
---|---|
1 | 2000 |
2 | 500 |
Bedingte Aggregation
Zahlungstabelle
Kunde | Zahlungsart | Menge |
---|---|---|
Peter | Kredit | 100 |
Peter | Kredit | 300 |
John | Kredit | 1000 |
John | Lastschrift | 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
Ergebnis:
Kunde | Kredit | Lastschrift |
---|---|---|
Peter | 400 | 0 |
John | 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
Ergebnis:
Kunde | credit_transaction_count | debit_transaction_count |
---|---|---|
Peter | 2 | 0 |
John | 1 | 1 |
AVG ()
Die Aggregatfunktion AVG () gibt den Durchschnitt eines bestimmten Ausdrucks zurück, normalerweise numerische Werte in einer Spalte. Angenommen, wir haben eine Tabelle mit der jährlichen Bevölkerungsberechnung in Städten auf der ganzen Welt. Die Aufzeichnungen für New York City sehen ähnlich wie die folgenden aus:
BEISPIELTABELLE
Stadtname | Population | Jahr |
---|---|---|
New York City | 8.550.405 | 2015 |
New York City | ... | ... |
New York City | 8.000.906 | 2005 |
So wählen Sie die durchschnittliche Einwohnerzahl von New York City (USA) aus einer Tabelle aus, die Ortsnamen, Bevölkerungsmessungen und Messjahre der letzten zehn Jahre enthält:
ABFRAGE
select city_name, AVG(population) avg_population
from city_population
where city_name = 'NEW YORK CITY';
Beachten Sie, dass das Messjahr in der Abfrage nicht vorhanden ist, da die Bevölkerung im Zeitverlauf gemittelt wird.
ERGEBNISSE
Stadtname | avg_population |
---|---|
New York City | 8.250.754 |
Hinweis: Die Funktion AVG () konvertiert Werte in numerische Typen. Dies ist besonders wichtig, wenn Sie mit Daten arbeiten.
List Verkettung
Teilweise Verdienst dieser SO-Antwort.
Mit List Concatenation wird eine Spalte oder ein Ausdruck zusammengefasst, indem die Werte für jede Gruppe in einer einzelnen Zeichenfolge zusammengefasst werden. Ein String zur Begrenzung jedes Werts (entweder leer oder ein Komma, wenn nicht angegeben) und die Reihenfolge der Werte im Ergebnis kann angegeben werden. Obwohl es nicht Teil des SQL-Standards ist, unterstützt es jeder große Anbieter von relationalen Datenbanken auf seine eigene Weise.
MySQL
SELECT ColumnA
, GROUP_CONCAT(ColumnB ORDER BY ColumnB SEPARATOR ',') AS ColumnBs
FROM TableName
GROUP BY ColumnA
ORDER BY ColumnA;
Oracle und 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 und früher
(CTE eingeschlossen, um das DRY-Prinzip zu fördern)
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 und SQL Azure
SELECT ColumnA
, STRING_AGG(ColumnB, ',') WITHIN GROUP (ORDER BY ColumnB) AS ColumnBs
FROM TableName
GROUP BY ColumnA
ORDER BY ColumnA;
SQLite
ohne zu bestellen:
SELECT ColumnA
, GROUP_CONCAT(ColumnB, ',') AS ColumnBs
FROM TableName
GROUP BY ColumnA
ORDER BY ColumnA;
Bestellung erfordert eine Unterabfrage oder 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;
Anzahl
Sie können die Anzahl der Zeilen zählen:
SELECT count(*) TotalRows
FROM employees;
Gesamtreihen |
---|
4 |
Oder zählen Sie die Mitarbeiter pro Abteilung:
SELECT DepartmentId, count(*) NumEmployees
FROM employees
GROUP BY DepartmentId;
DepartmentId | Anzahl Beschäftigte |
---|---|
1 | 3 |
2 | 1 |
Sie können über eine Spalte / einen Ausdruck mit dem Effekt zählen, der die NULL
Werte nicht zählt:
SELECT count(ManagerId) mgr
FROM EMPLOYEES;
mgr |
---|
3 |
(Es gibt eine Nullwertmanager-Spalte)
Sie können DISTINCT auch innerhalb einer anderen Funktion wie COUNT verwenden, um nur die DISTINCT- Mitglieder des Sets zu finden, auf denen die Operation ausgeführt wird.
Zum Beispiel:
SELECT COUNT(ContinentCode) AllCount
, COUNT(DISTINCT ContinentCode) SingleCount
FROM Countries;
Gibt verschiedene Werte zurück. Der SingleCount zählt nur einmal Kontinente, während der AllCount Duplikate enthält.
ContinentCode |
---|
OC |
EU |
WIE |
N / A |
N / A |
AF |
AF |
AllCount: 7 SingleCount: 5
Max
Ermitteln Sie den maximalen Wert der Spalte:
select max(age) from employee;
Im obigen Beispiel wird größten Wert für Spalte zurückgeben age
der employee
Tabelle.
Syntax:
SELECT MAX(column_name) FROM table_name;
Mindest
Finde den kleinsten Wert der Spalte:
select min(age) from employee;
Im obigen Beispiel wird kleinsten Wert für Spalte zurückgeben age
der employee
Tabelle.
Syntax:
SELECT MIN(column_name) FROM table_name;