Requête GROUP BY en T-SQL pour agréger des données

Exemples de requêtes GROUP BY en T-SQL pour agréger les données d’une table avec SQL Server.

La requête GROUP BY en T-SQL est une clause utilisée dans le code SQL Server ou SQL standard pour regrouper les lignes d’un résultat de requête selon une ou plusieurs colonnes. La clause GROUP BY est généralement utilisée avec les fonctions d’agrégation telles que SUM, AVG, MAX, MIN, COUNT, etc. pour produire des résultats groupés. Voici 10 exemples concrets de l’utilisation de la clause GROUP BY dans T-SQL.

Dans tous ces exemples, la requête GROUP BY en T-SQL regroupe les lignes en fonction de la ou des colonnes spécifiées, et les fonctions d’agrégation sont utilisées pour produire des résultats groupés, c’est à dire agrégés.

1. Créer les tables d’exemples pour les requêtes GROUP BY

Pour simplifier le tutoriel, voici des scripts prêts et fonctionnels pour créer des tables et exécuter les requêtes.

1.1 Requête pour créer la table des produits

Voici le code de création de la table des produits avec 10 lignes de données.

-- Création de la table dbo.Products
CREATE TABLE products (
   product_id INT PRIMARY KEY,
   name VARCHAR(255) NOT NULL,
   category VARCHAR(255) NOT NULL,
   quantity INT NOT NULL,
   price DECIMAL(10,2) NOT NULL,
   purchase_price DECIMAL(10,2) NOT NULL
);

-- Insertion de quelques lignes dans la table dbo.Products
INSERT INTO products 
   (product_id, name, category, quantity, price, purchase_price)
VALUES (1, 'Ordinateur portable', 'Informatique', 10, 1000, 500),
       (2, 'Tablette tactile', 'Informatique', 5, 500, 250),
       (3, 'Téléviseur LED', 'Electronique', 20, 2000, 1000),
       (4, 'Smartphone', 'Electronique', 15, 300, 150),
       (5, 'Aspirateur', 'Electroménager', 30, 100, 50),
       (6, 'Lave-linge', 'Electroménager', 25, 500, 250),
       (7, 'Réfrigérateur', 'Electroménager', 35, 700, 350),
       (8, 'Four micro-ondes', 'Electroménager', 40, 100, 50),
       (9, 'Machine à laver', 'Electroménager', 45, 800, 400),
       (10, 'Hotte aspirante', 'Electroménager', 50, 150, 75);

1.2 Requête pour créer la table des commandes

-- Créer la table des commandes : dbo.Orders
CREATE TABLE dbo.Orders(
   order_id INT PRIMARY KEY,
   customer_id INT NOT NULL,
   order_date DATE NOT NULL,
   product_id INT NOT NULL,
   quantity INT NOT NULL,
   price DECIMAL(10,2) NOT NULL,
   sales DECIMAL(10,2) NOT NULL
);

-- Insertion de quelques lignes dans la table dbo.Orders
INSERT INTO dbo.Orders 
   (order_id, customer_id, order_date, product_id, quantity, price, sales)
VALUES (1, 1, '2022-01-01', 1, 2, 1000, 2000),
       (2, 2, '2022-01-02', 2, 3, 500, 1500),
       (3, 3, '2022-01-03', 3, 1, 2000, 2000),
       (4, 4, '2022-01-04', 4, 5, 300, 1500),
       (5, 5, '2022-01-05', 5, 1, 100, 100),
       (6, 6, '2022-01-06', 6, 2, 500, 1000),
       (7, 7, '2022-01-07', 7, 1, 700, 700),
       (8, 8, '2022-01-08', 8, 4, 100, 400),
       (9, 9, '2022-01-09', 9, 1, 800, 800),
       (10, 10, '2022-01-10', 10, 2, 150, 300);

2. Requête SQL Server pour calculer la somme des ventes par année

Pour obtenir la somme des ventes par année, vous pouvez utiliser la requête suivante.

SELECT
   year,
   SUM(sales)
FROM dbo.Orders
GROUP BY
   year;

3. Nombre de commandes par client avec une requête T-SQL

Pour obtenir le nombre de commandes pour chaque client, vous pouvez utiliser la requête suivante.

SELECT
   customer_id,
   COUNT(*)
FROM dbo.Orders
GROUP BY
   customer_id;

4. GROUP BY avec le total des ventes par année et par pays

Pour obtenir le total des ventes par année et par pays, vous pouvez utiliser la requête suivante :

SELECT
   year,
   country,
   SUM(sales)
FROM dbo.Orders
GROUP BY
   year,
   country;

5. Requête GROUP BY pour afficher les commandes par pays et année

Pour obtenir le nombre de commandes par pays et par année, vous pouvez utiliser la requête suivante.

SELECT
   year,
   country,
   COUNT(*)
FROM dbo.Orders
GROUP BY
   year,
   country;
Requête SELECT CASE WHEN en T-SQL pour gérer les conditions

6. Calculer le total des commandes avec GROUP BY et COUNT

Pour obtenir le nombre de commandes par produit et par année, vous pouvez utiliser la requête suivante.

SELECT
   year,
   product_id,
   COUNT(*)
FROM dbo.Orders
GROUP BY
   year,
   product_id;

Voici maintenant cinq exemples de code plus complexes utilisant la clause GROUP BY avec les différentes fonctions d’agrégation.

7. Moyenne par mois et année avec GROUP BY, YEAR, MONTH et AVG

Pour obtenir la moyenne des quantités commandées par mois et par année, vous pouvez utiliser la requête suivante.

SELECT
   YEAR(order_date) AS year,
   MONTH(order_date) AS month,
   AVG(quantity)
FROM orders
GROUP BY
   YEAR(order_date),
   MONTH(order_date);

8. Requête GROUP BY avec les commandes par catégorie et année

Pour obtenir le nombre de commandes par catégorie de produit et par année, vous pouvez utiliser la requête suivante :

SELECT
   YEAR(order_date) AS year,
   p.category, COUNT(*)
FROM dbo.Orders o
INNER JOIN dbo.Products p
   ON o.product_id = p.product_id
GROUP BY
   YEAR(order_date),
   p.category;

9. Calculer le prix le plus élevé payé par client en T-SQL

Pour obtenir le prix le plus élevé payé par chaque client, vous pouvez utiliser la requête suivante.

SELECT
   customer_id,
   MAX(price)
FROM dbo.Orders
GROUP BY
   customer_id;

10. Nombre de commandes pour chaque produit avec GROUP BY

Pour obtenir le nombre de commandes contenant chaque produit, vous pouvez utiliser la requête suivante.

SELECT
   product_id,
   COUNT(*)
FROM dbo.Orders
GROUP BY
   product_id;
Les opérateurs de comparaison T-SQL

11. Somme des ventes par catégorie et par année avec une requête T-SQL

Pour obtenir la somme des ventes par catégorie de produit et par année, vous pouvez utiliser la requête suivante :

SELECT
   YEAR(order_date) AS year,
   p.category,
   SUM(o.sales)
FROM orders o
INNER JOIN products p
   ON o.product_id = p.product_id
GROUP BY
   YEAR(order_date),
   p.category;

L’utilité de la clause GROUP BY réside dans sa capacité à résumer et à agréger les données d’une table ou d’une vue, ce qui peut être très utile dans de nombreux cas. Par exemple, vous pouvez utiliser GROUP BY pour obtenir la somme des ventes par année, le nombre de commandes par client, le total des ventes par pays et par année, ou encore le nombre de commandes par produit et par année.

12. Conclusion sur le GROUP BY avec SQL Server

Il est important de noter que la clause GROUP BY doit être utilisée avec prudence, car elle peut avoir un impact sur les performances de la requête si elle est utilisée de manière inappropriée. En effet, la clause GROUP BY peut être coûteuse en termes de ressources si elle est utilisée sur une grande table ou si elle est combinée avec d’autres clauses coûteuses telles que DISTINCT ou ORDER BY. Il est donc recommandé de bien comprendre comment fonctionne GROUP BY et de l’utiliser de manière appropriée dans vos requêtes SQL.

Agrégation de données avec SSIS

Pour aller plus loin, voici d’autres façons d’aggréger des données avec SQL Server , cette fois avec SSIS.

Grouper plusieurs tables avec SSIS Union All

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *