3.1 Instruction GROUP BY

Le langage SQL est très puissant. En plus de la simple récupération des données, il vous permet de regrouper les données au moment de la requête. Par exemple, nous voulons savoir combien de types de produits de chaque marque nous avons, comment pouvons-nous faire cela ?

Il existe un opérateur spécial pour cela GROUP BY, voici comment il est écrit.

GROUP BY column

Écrivons une requête qui demande à SQL d'afficher le nombre de types de produits pour chaque marque. Une telle requête ressemblerait à ceci :

SELECT brand, COUNT(*)
FROM product
GROUP BY brand

Vous obtiendrez le résultat de requête suivant :

marque compter(*)
(NUL) 2
Bosch 4
Ikéa 6
LG 2
Fleur intelligente 1

Analysons attentivement le type de demande que nous avons rédigé et le type de résultat que nous avons obtenu. En conséquence, nous voyons deux colonnes. Le premier avec une liste de marques, ce qui est logique. Nous voulions obtenir quelque chose comme un ensemble de paires "marque --> quantité" .

Veuillez noter que parmi les noms de marque, il y a un mot NULL. En effet, nous avons des produits dans la marque dans laquelle il est écrit NULL, et nous les voyons ici. Un peu inattendu, mais utile. Nous pouvons voir combien de produits sans marque il y a.

Examinons maintenant de plus près la demande. Nous voulions connaître le nombre de produits de chaque marque, nous avons donc écrit GROUP BY brand, et dans SELECTnous avons écrit marque et l'expressionCOUNT(*)

COUNT(*)est une fonction dite d'agrégation exécutée sur un groupe de lignes. Dans notre cas, elle compte simplement leur nombre. Il existe de nombreuses fonctions de ce type et nous les examinerons un peu plus tard.

3.2 Requêtes complexes avec GROUP BY

Écrivons maintenant une requête dans laquelle nous supprimons d'abord les produits dont le prix est inférieur à 10, puis les regroupons. Une telle requête ressemblerait à ceci :

SELECT brand, COUNT(*)
FROM product
WHERE price > 10
GROUP BY brand

Vous obtiendrez le résultat de requête suivant :

marque compter(*)
Bosch 4
Ikéa 5
LG 2
Fleur intelligente 1

Tous les produits NULL ont disparu de notre tableau de résultats, car ils étaient très bon marché, et le nombre de produits IKEA a diminué de 1. De 6 à 5.

Cela suggère que vous appliquiez d'abord WHEREles lignes souhaitées à filtrer, puis appliquez ensuite le regroupement au résultat.

3.3 Noms des colonnes du résultat

Au fait, vous pouvez donner des noms aux colonnes résultantes. Voyez comment le serveur a suggéré le nom count(*)? Remplaçons-le par total. Une telle requête ressemblerait à ceci :

SELECT brand, COUNT(*) AS total
FROM product
WHERE price > 10
GROUP BY brand

Vous obtiendrez le résultat de requête suivant :

marque total
Bosch 4
Ikéa 5
LG 2
Fleur intelligente 1

Vous pouvez également renommer des colonnes existantes. Prenons l'une des requêtes précédemment utilisées et ajoutons de nouveaux noms aux colonnes.

SELECT
id AS  product_id,
name AS product_name,
price
FROM product
WHERE price < 20 AND brand IS NOT NULL

Vous obtiendrez le résultat de requête suivant :

id_produit nom_du_produit prix
2 Chaise 5,00
8 Lampe 15h00