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;


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow