SQL
Functies (geaggregeerd)
Zoeken…
Syntaxis
- Functie (uitdrukking [ DISTINCT ]) -DISTINCT is een optionele parameter
- AVG ([ALL | DISTINCT] expressie)
- COUNT ({[ALL | DISTINCT] expressie] | *})
- Samenwerkingsverband (<column_expression>)
- MAX (expressie [ALLES | DISTINCT])
- MIN (uitdrukking [ALLES | DISTINCT])
- SOM (expressie [ALLES | DISTINCT])
- VAR (expressie [ALL | DISTINCT])
OVER ([partition_by_clause] order_by_clause) - VARP ([ALL | DISTINCT] expressie)
OVER ([partition_by_clause] order_by_clause - STDEV ([ALL | DISTINCT] expressie)
OVER ([partition_by_clause] order_by_clause) - STDEVP ([ALL | DISTINCT] expressie)
OVER ([partition_by_clause] order_by_clause)
Opmerkingen
In databasebeheer is een aggregatiefunctie een functie waarbij de waarden van meerdere rijen worden gegroepeerd als invoer op bepaalde criteria om een enkele waarde met een significantere betekenis of meting te vormen, zoals een set, een tas of een lijst.
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.
Geaggregeerde functies worden gebruikt om te rekenen met een "geretourneerde kolom met numerieke gegevens" uit uw
SELECT
instructie. Ze vatten in principe de resultaten samen van een bepaalde kolom met geselecteerde gegevens. - SQLCourse2.com
Alle aggregatiefuncties negeren NULL-waarden.
SOM
Sum
functie somt de waarde op van alle rijen in de groep. Als de group by-clausule wordt weggelaten, worden alle rijen opgeteld.
select sum(salary) TotalSalary
from employees;
Totale salaris |
---|
2500 |
select DepartmentId, sum(salary) TotalSalary
from employees
group by DepartmentId;
DepartmentId | Totale salaris |
---|---|
1 | 2000 |
2 | 500 |
Voorwaardelijke aggregatie
Betalingstabel
Klant | Betalingswijze | Bedrag |
---|---|---|
Peter | Credit | 100 |
Peter | Credit | 300 |
John | Credit | 1000 |
John | Debiteren | 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
Resultaat:
Klant | Credit | Debiteren |
---|---|---|
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
Resultaat:
Klant | credit_transaction_count | debit_transaction_count |
---|---|---|
Peter | 2 | 0 |
John | 1 | 1 |
AVG ()
De aggregatiefunctie AVG () retourneert het gemiddelde van een bepaalde uitdrukking, meestal numerieke waarden in een kolom. Stel dat we een tabel hebben met de jaarlijkse berekening van de bevolking in steden over de hele wereld. De records voor New York City lijken op die hieronder:
VOORBEELDTAFEL
stads naam | bevolking | jaar |
---|---|---|
New York City | 8.550.405 | 2015 |
New York City | ... | ... |
New York City | 8.000.906 | 2005 |
Om de gemiddelde bevolking van New York City, VS te selecteren uit een tabel met plaatsnamen, bevolkingsmetingen en meetjaren voor de laatste tien jaar:
QUERY
select city_name, AVG(population) avg_population
from city_population
where city_name = 'NEW YORK CITY';
Merk op hoe meetjaar afwezig is in de zoekopdracht, aangezien de populatie gemiddeld wordt in de tijd.
RESULTATEN
stads naam | avg_population |
---|---|
New York City | 8.250.754 |
Opmerking: De functie AVG () converteert waarden naar numerieke typen. Dit is vooral belangrijk om in gedachten te houden bij het werken met datums.
Lijstaaneenschakeling
Gedeeltelijke erkenning voor dit antwoord.
Lijstaaneenschakeling aggregeert een kolom of uitdrukking door de waarden te combineren in een enkele string voor elke groep. Een tekenreeks om elke waarde af te bakenen (leeg of een komma indien weggelaten) en de volgorde van de waarden in het resultaat kunnen worden opgegeven. Hoewel het geen deel uitmaakt van de SQL-standaard, ondersteunt elke grote leverancier van relationele databases het op zijn eigen manier.
MySQL
SELECT ColumnA
, GROUP_CONCAT(ColumnB ORDER BY ColumnB SEPARATOR ',') AS ColumnBs
FROM TableName
GROUP BY ColumnA
ORDER BY ColumnA;
Oracle & 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 en eerder
(CTE inbegrepen om het DRY-principe aan te moedigen)
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 en SQL Azure
SELECT ColumnA
, STRING_AGG(ColumnB, ',') WITHIN GROUP (ORDER BY ColumnB) AS ColumnBs
FROM TableName
GROUP BY ColumnA
ORDER BY ColumnA;
SQLite
zonder te bestellen:
SELECT ColumnA
, GROUP_CONCAT(ColumnB, ',') AS ColumnBs
FROM TableName
GROUP BY ColumnA
ORDER BY ColumnA;
bestellen vereist een subquery of 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;
tellen
U kunt het aantal rijen tellen:
SELECT count(*) TotalRows
FROM employees;
TotalRows |
---|
4 |
Of tel de medewerkers per afdeling:
SELECT DepartmentId, count(*) NumEmployees
FROM employees
GROUP BY DepartmentId;
DepartmentId | NumEmployees |
---|---|
1 | 3 |
2 | 1 |
U kunt tellen over een kolom / uitdrukking met het effect dat de NULL
waarden niet meetelt:
SELECT count(ManagerId) mgr
FROM EMPLOYEES;
mgr |
---|
3 |
(Er is één lege waarde managerID-kolom)
U kunt DISTINCT ook gebruiken binnen een andere functie zoals COUNT om alleen de DISTINCT leden van de set te vinden om de bewerking uit te voeren.
Bijvoorbeeld:
SELECT COUNT(ContinentCode) AllCount
, COUNT(DISTINCT ContinentCode) SingleCount
FROM Countries;
Retourneert verschillende waarden. De SingleCount telt slechts eenmaal individuele continenten, terwijl de AllCount duplicaten bevat.
ContinentCode |
---|
OC |
EU |
NET ZO |
NA |
NA |
AF |
AF |
AllCount: 7 SingleCount: 5
Max
Zoek de maximale waarde van kolom:
select max(age) from employee;
Bovenstaande voorbeeld zal de grootste waarde terug te keren voor kolom age
van de employee
tafel.
Syntaxis:
SELECT MAX(column_name) FROM table_name;
min
Zoek de kleinste waarde van de kolom:
select min(age) from employee;
Bovenstaande voorbeeld zullen kleinste waarde terug te keren voor kolom age
van de employee
tafel.
Syntaxis:
SELECT MIN(column_name) FROM table_name;