SQL
Fonctions (agrégées)
Recherche…
Syntaxe
- Fonction (expression [ DISTINCT ]) -DISTINCT est un paramètre facultatif
- AVG (expression [ALL | DISTINCT])
- COUNT ({[ALL | DISTINCT] expression] | *})
- GROUPING (<expression_colonne>)
- MAX (expression [ALL | DISTINCT])
- MIN (expression [ALL | DISTINCT])
- SUM ([ALL | DISTINCT] expression)
- VAR (expression [ALL | DISTINCT])
OVER ([partition_by_clause] order_by_clause) - VARP (expression [ALL | DISTINCT])
OVER ([partition_by_clause] order_by_clause - STDEV (expression [ALL | DISTINCT])
OVER ([partition_by_clause] order_by_clause) - STDEVP (expression [ALL | DISTINCT])
OVER ([partition_by_clause] order_by_clause)
Remarques
Dans la gestion de base de données, une fonction d'agrégat est une fonction où les valeurs de plusieurs lignes sont regroupées en tant qu'entrée sur certains critères pour former une valeur unique de signification ou de mesure plus significative telle qu'un ensemble, un sac ou une 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.
Les fonctions d'agrégat sont utilisées pour calculer une "colonne de données numériques renvoyée" de votre
SELECT
. Ils résument essentiellement les résultats d'une colonne particulière de données sélectionnées. - SQLCourse2.com
Toutes les fonctions d'agrégation ignorent les valeurs NULL.
SOMME
Sum
fonction somme additionne la valeur de toutes les lignes du groupe. Si la clause group by est omise, puis somme toutes les lignes.
select sum(salary) TotalSalary
from employees;
Salaire total |
---|
2500 |
select DepartmentId, sum(salary) TotalSalary
from employees
group by DepartmentId;
DépartementId | Salaire total |
---|---|
1 | 2000 |
2 | 500 |
Agrégation conditionnelle
Tableau des paiements
Client | Type de paiement | Montant |
---|---|---|
Peter | Crédit | 100 |
Peter | Crédit | 300 |
John | Crédit | 1000 |
John | Débit | 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
Résultat:
Client | Crédit | Débit |
---|---|---|
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
Résultat:
Client | credit_transaction_count | debit_transaction_count |
---|---|---|
Peter | 2 | 0 |
John | 1 | 1 |
AVG ()
La fonction d'agrégation AVG () renvoie la moyenne d'une expression donnée, généralement des valeurs numériques dans une colonne. Supposons que nous ayons un tableau contenant le calcul annuel de la population dans les villes du monde entier. Les enregistrements pour New York City ressemblent à ceux ci-dessous:
EXEMPLE DE TABLE
Nom de Ville | population | an |
---|---|---|
La ville de New York | 8 550 405 | 2015 |
La ville de New York | ... | ... |
La ville de New York | 8 000 906 | 2005 |
Pour sélectionner la population moyenne de la ville de New York, États-Unis, à partir d'un tableau contenant les noms de villes, les mesures de population et les années de mesure pour les dix dernières années:
QUESTION
select city_name, AVG(population) avg_population
from city_population
where city_name = 'NEW YORK CITY';
Notez que l'année de mesure est absente de la requête, car la population est moyennée au fil du temps.
RÉSULTATS
Nom de Ville | avg_population |
---|---|
La ville de New York | 8 250 754 |
Remarque: La fonction AVG () convertit les valeurs en types numériques. Ceci est particulièrement important lorsque vous travaillez avec des dates.
Concaténation de liste
Crédit partiel à cette réponse SO.
La concaténation de liste agrège une colonne ou une expression en combinant les valeurs en une seule chaîne pour chaque groupe. Une chaîne pour délimiter chaque valeur (vide ou une virgule si elle est omise) et l'ordre des valeurs dans le résultat peuvent être spécifiés. Bien qu'il ne fasse pas partie du standard SQL, chaque grand fournisseur de bases de données relationnelles le prend en charge à sa manière.
MySQL
SELECT ColumnA
, GROUP_CONCAT(ColumnB ORDER BY ColumnB SEPARATOR ',') AS ColumnBs
FROM TableName
GROUP BY ColumnA
ORDER BY ColumnA;
Oracle et 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;
serveur SQL
SQL Server 2016 et versions antérieures
(CTE inclus pour encourager le principe 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 et SQL Azure
SELECT ColumnA
, STRING_AGG(ColumnB, ',') WITHIN GROUP (ORDER BY ColumnB) AS ColumnBs
FROM TableName
GROUP BY ColumnA
ORDER BY ColumnA;
SQLite
sans commander:
SELECT ColumnA
, GROUP_CONCAT(ColumnB, ',') AS ColumnBs
FROM TableName
GROUP BY ColumnA
ORDER BY ColumnA;
la commande nécessite une sous-requête ou 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;
Compter
Vous pouvez compter le nombre de lignes:
SELECT count(*) TotalRows
FROM employees;
TotalRows |
---|
4 |
Ou comptez les employés par département:
SELECT DepartmentId, count(*) NumEmployees
FROM employees
GROUP BY DepartmentId;
DépartementId | NumEmployees |
---|---|
1 | 3 |
2 | 1 |
Vous pouvez compter sur une colonne / expression avec l'effet qui ne compte pas les valeurs NULL
:
SELECT count(ManagerId) mgr
FROM EMPLOYEES;
mgr |
---|
3 |
(Il y a une colonne managerID valeur nulle)
Vous pouvez également utiliser DISTINCT dans une autre fonction telle que COUNT pour ne trouver que les membres DISTINCT de l'ensemble pour effectuer l'opération.
Par exemple:
SELECT COUNT(ContinentCode) AllCount
, COUNT(DISTINCT ContinentCode) SingleCount
FROM Countries;
Renverra des valeurs différentes. Le compte SingleCount ne comptera qu'une fois les continents, tandis que le compte AllCount comportera des doublons.
ContinentCode |
---|
OC |
UE |
COMME |
N / A |
N / A |
UN F |
UN F |
AllCount: 7 SingleCount: 5
Max
Trouvez la valeur maximale de la colonne:
select max(age) from employee;
L'exemple ci-dessus renverra la valeur la plus élevée pour l' age
de la colonne de la table des employee
.
Syntaxe:
SELECT MAX(column_name) FROM table_name;
Min
Trouvez la plus petite valeur de colonne:
select min(age) from employee;
L'exemple ci-dessus renvoie la plus petite valeur pour l' age
de la colonne de la table des employee
.
Syntaxe:
SELECT MIN(column_name) FROM table_name;