Data Science, Python, Economie ...

Accueil

Opérations sur données aggrégées dans SQL

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élection
  • sum(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ès GROUP BY et permet de filtrer les résultats, tandis que WHERE vient en amont (avant GROUP 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...
.