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;
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;
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.
Soyez le premier à commenter