SQL donne la possibilité d'aggréger les données par groupes avec GROUP BY col
. On peut ensuite appliquer des fonctions sur chacun de ces groupes.
Utilisation de GROUP BY
Sans fonction
La clause GROUP BY
seule a un effet similaire à DISTINCT
: elle supprime les doublons et retourne les paires uniques.
Avec deux colonnes, par exemple :
SELECT city, stabr
FROM pls_fy2014_pupld14a
GROUP BY city, stabr
ORDER BY city, stabr;
city | stabr |
---|---|
ABBEVILLE | AL |
ABBEVILLE | LA |
ABBEVILLE | SC |
ABBOTSFORD | WI |
ABERDEEN | ID |
ABERDEEN | SD |
ABERNATHY | TX |
ABILENE | KS |
ABILENE | TX |
ABINGDON | IL |
ABINGDON | VA |
…. | … |
ZEELAND | MI |
ZEIGLER | IL |
ZELIENOPLE | PA |
ZENDA | KS |
ZIA PUEBLO | NM |
ZION | IL |
ZIONSVILLE | IN |
ZUMBROTA | MN |
ZUNI | NM |
Avec une fonction
Exemple avec count(*)
, qui compte le nombre de lignes dans la sélection :
SELECT stabr, count(*)
FROM pls_fy2014_pupld14a
GROUP BY stabr
ORDER BY count(*) DESC;
stabr | count |
---|---|
NY | 756 |
IL | 625 |
TX | 556 |
IA | 543 |
PA | 455 |
MI | 389 |
WI | 381 |
MA | 370 |
KS | 328 |
NJ | 296 |
… | … |
Fonctions sont habituellement utilisées pour décrire les groupes :
count(*)
: compte le nombre de lignes dans la sélectionsum(col)
: somme les valeurs de chaque ligne de la sélection (colonne x groupe)min(col), max(col)
: retourne la valeur minimum ou maximum de la sélection (colonne x groupe)
Filtrer les groupes affichés avec HAVING
HAVING
permet de filtrer en fin de requête les groupes retournés selon une condition.
L'avantage de HAVING
est que le filtrage peut être le résultat d'une fonction appelée sur chaque groupe, une des colonnes de la sélection ou la colonne aggrégative.
Exemple pour un filtre sur la colonne aggrégative :
SELECT stabr, count(*)
FROM pls_fy2014_pupld14a
GROUP BY stabr
HAVING stabr LIKE 'A%'
ORDER BY count(*) DESC;
stabr | count |
---|---|
AL | 224 |
AZ | 91 |
AK | 85 |
AR | 58 |
AS | 1 |
Sur le résultat d'une fonction appelée sur chaque groupe :
SELECT stabr, count(*)
FROM pls_fy2014_pupld14a
GROUP BY stabr
HAVING count(*) > 500
ORDER BY count(*) DESC;
stabr | count |
---|---|
NY | 756 |
IL | 625 |
TX | 556 |
IA | 543 |
A noter : En règle générale,
HAVING
vient aprèsGROUP BY
et permet de filtrer les résultats, tandis queWHERE
vient en amont (avantGROUP BY
, donc) et permet de filtrer ce qui est inclu dans la sélectionSELECTionner des données SQL
Introduction
Obtenir l'intégralité du tableau : *
La commande SELECT permet de sélectionner les données d'un tableau. L'instruction la plus simple retournant l'intégralité d'un tableau :
SELECT * FROM my_table;
Le nom du tableau est précisé avec le mot-clé FROM
L'opérateur * retourne tous les éléments disponibles.
Obtenir un sous-ensemble des colonnes du tableau : (col1, col2, ...)
On remplace *par le nom des colonnes qui nous intéresse :
SELECT some_column, another_column, amazing....