Les fonctions d’agrégation SQL sont des outils puissants pour agréger et analyser les données. Cet article se concentre sur la manière d’analyser les données par mois et par année, en expliquant en détail les bases des fonctions d’agrégation ainsi que des exemples concrets de requêtes. Apprenez comment utiliser SQL pour agréger les données efficacement et obtenir des insights commerciaux.
Bases des fonctions d’agrégation
Les fonctions d’agrégation sont des fonctions qui permettent d’obtenir un résultat unique à partir de plusieurs lignes d’une base de données. Voici les fonctions d’agrégation les plus courantes :
SUM
Calcule la somme des données numériques.
AVG
Calcule la moyenne des données numériques.
COUNT
Compte le nombre de lignes.
MAX
Renvoie la valeur maximale d’une colonne spécifiée.
MIN
Renvoie la valeur minimale d’une colonne spécifiée.
Ces fonctions peuvent être utilisées avec la clause GROUP BY pour agréger les données par groupe spécifique. Voyons ensuite comment analyser les données par mois et par année.
Bases de l’analyse des données mensuelles
L’analyse des données mensuelles consiste à agréger et analyser les données par mois. En SQL, vous pouvez utiliser une colonne de type DATE pour grouper les données par mois et appliquer des fonctions d’agrégation.
Structure de base d’une requête SQL
Voici une requête SQL de base pour agréger des données mensuelles :
SELECT
DATE_FORMAT(order_date, '%Y-%m') AS month,
SUM(sales) AS monthly_sales
FROM
orders
GROUP BY
DATE_FORMAT(order_date, '%Y-%m');
Dans cette requête, la fonction DATE_FORMAT
est utilisée pour convertir la date de la colonne order_date
au format « année-mois », et agréger les ventes pour chaque mois.
Bases de l’analyse des données annuelles
L’analyse des données annuelles consiste à agréger et analyser les données par année. En SQL, vous pouvez utiliser une colonne de type DATE pour grouper les données par année et appliquer des fonctions d’agrégation.
Structure de base d’une requête SQL
Voici une requête SQL de base pour agréger des données annuelles :
SELECT
YEAR(order_date) AS year,
SUM(sales) AS annual_sales
FROM
orders
GROUP BY
YEAR(order_date);
Dans cette requête, la fonction YEAR
est utilisée pour extraire l’année de la colonne order_date
et agréger les ventes pour chaque année.
Exemples concrets de requêtes SQL (données de ventes)
Voici des exemples concrets de requêtes SQL pour agréger les données de ventes par mois et par année.
Agrégation des données de ventes mensuelles
Exemple de requête pour agréger les ventes par mois :
SELECT
DATE_FORMAT(order_date, '%Y-%m') AS month,
SUM(sales) AS monthly_sales
FROM
orders
GROUP BY
DATE_FORMAT(order_date, '%Y-%m')
ORDER BY
month;
Dans cette requête, la fonction DATE_FORMAT
est utilisée pour convertir la date au format « année-mois » et calculer le total des ventes pour chaque mois. Les résultats sont triés par mois.
Agrégation des données de ventes annuelles
Exemple de requête pour agréger les ventes par année :
SELECT
YEAR(order_date) AS year,
SUM(sales) AS annual_sales
FROM
orders
GROUP BY
YEAR(order_date)
ORDER BY
year;
Dans cette requête, la fonction YEAR
est utilisée pour extraire l’année de la date et calculer le total des ventes pour chaque année. Les résultats sont triés par année.
Exemples concrets de requêtes SQL (données des utilisateurs)
Voici des exemples concrets de requêtes SQL pour agréger les données des utilisateurs par mois et par année.
Agrégation du nombre d’inscriptions mensuelles
Exemple de requête pour agréger le nombre d’inscriptions d’utilisateurs par mois :
SELECT
DATE_FORMAT(registration_date, '%Y-%m') AS month,
COUNT(*) AS monthly_registrations
FROM
users
GROUP BY
DATE_FORMAT(registration_date, '%Y-%m')
ORDER BY
month;
Dans cette requête, la fonction DATE_FORMAT
est utilisée pour convertir la date au format « année-mois » et compter le nombre d’inscriptions d’utilisateurs pour chaque mois. Les résultats sont triés par mois.
Agrégation du nombre d’inscriptions annuelles
Exemple de requête pour agréger le nombre d’inscriptions d’utilisateurs par année :
SELECT
YEAR(registration_date) AS year,
COUNT(*) AS annual_registrations
FROM
users
GROUP BY
YEAR(registration_date)
ORDER BY
year;
Dans cette requête, la fonction YEAR
est utilisée pour extraire l’année de la date et compter le nombre d’inscriptions d’utilisateurs pour chaque année. Les résultats sont triés par année.
Applications avancées de regroupement et de filtrage
Nous allons expliquer comment effectuer une analyse de données plus détaillée en utilisant les clauses GROUP BY et HAVING.
Applications avancées de GROUP BY
La clause GROUP BY peut être utilisée pour regrouper les données à l’aide de plusieurs colonnes. Par exemple, pour agréger les ventes par mois et par catégorie de produit, utilisez la requête suivante :
SELECT
DATE_FORMAT(order_date, '%Y-%m') AS month,
product_category,
SUM(sales) AS monthly_sales
FROM
orders
GROUP BY
DATE_FORMAT(order_date, '%Y-%m'),
product_category
ORDER BY
month,
product_category;
Dans cette requête, les données sont regroupées par mois en fonction de la date de commande et les ventes sont agrégées par catégorie de produit.
Filtrage avec la clause HAVING
La clause HAVING est utilisée pour spécifier des conditions sur les résultats regroupés par la clause GROUP BY. Par exemple, pour filtrer les mois avec des ventes mensuelles dépassant un certain montant, utilisez la requête suivante :
SELECT
DATE_FORMAT(order_date, '%Y-%m') AS month,
SUM(sales) AS monthly_sales
FROM
orders
GROUP BY
DATE_FORMAT(order_date, '%Y-%m')
HAVING
monthly_sales > 100000
ORDER BY
month;
Dans cette requête, seuls les mois avec des ventes mensuelles supérieures à 100 000 yens sont inclus dans les résultats.
Exemple avancé : Ventes annuelles d’une catégorie de produit spécifique
Exemple de requête pour agréger les ventes annuelles d’une catégorie de produit spécifique, et n’afficher que les années avec des ventes annuelles supérieures à 50 000 yens :
SELECT
YEAR(order_date) AS year,
product_category,
SUM(sales) AS annual_sales
FROM
orders
WHERE
product_category = 'Specific Category'
GROUP BY
YEAR(order_date),
product_category
HAVING
annual_sales > 50000
ORDER BY
year;
Dans cette requête, les commandes de la catégorie de produit « Specific Category » sont regroupées par année, et seules les années avec des ventes annuelles supérieures à 50 000 yens sont filtrées et affichées.
Optimisation des performances
Nous expliquons ici des techniques et des bonnes pratiques pour améliorer les performances des requêtes d’agrégation.
Utilisation des index
L’utilisation d’index peut considérablement améliorer la vitesse d’exécution des requêtes. En particulier, il est efficace de créer des index sur les colonnes utilisées dans les fonctions d’agrégation, ainsi que sur les colonnes fréquemment utilisées dans les clauses GROUP BY ou WHERE.
CREATE INDEX idx_order_date ON orders(order_date);
Cette requête crée un index sur la colonne order_date
, ce qui accélère les recherches et les agrégations basées sur la date de commande.
Optimiser la rédaction des requêtes
Vous pouvez améliorer les performances en structurant judicieusement vos requêtes. Par exemple, éviter l’utilisation de sous-requêtes et sélectionner uniquement les colonnes nécessaires sont des pratiques efficaces.
Exemple de requête inefficace
SELECT
YEAR(order_date) AS year,
(SELECT SUM(sales) FROM orders WHERE YEAR(order_date) = year) AS annual_sales
FROM
orders
GROUP BY
YEAR(order_date);
Cette requête est inefficace. Il est plus rapide de procéder à l’agrégation directement, sans utiliser de sous-requêtes.
Exemple de requête efficace
SELECT
YEAR(order_date) AS year,
SUM(sales) AS annual_sales
FROM
orders
GROUP BY
YEAR(order_date);
Cette requête s’exécute plus rapidement car elle effectue l’agrégation directement.
Normalisation et dénormalisation des données
Il est essentiel de bien normaliser vos données lors de la conception de la base de données. Cependant, pour les requêtes analytiques en lecture seule, la dénormalisation peut parfois améliorer les performances. La dénormalisation consiste à tolérer la redondance des données pour éviter les jointures.
Utilisation des partitions
Pour les tables volumineuses, l’utilisation de partitions peut améliorer les performances. La partition est une méthode permettant de diviser logiquement une table et de distribuer les données en fonction de conditions spécifiques.
CREATE TABLE orders (
order_id INT,
order_date DATE,
sales DECIMAL(10, 2),
product_category VARCHAR(50),
...
) PARTITION BY RANGE (YEAR(order_date)) (
PARTITION p2020 VALUES LESS THAN (2021),
PARTITION p2021 VALUES LESS THAN (2022),
PARTITION p2022 VALUES LESS THAN (2023)
);
Dans cette requête, la table est partitionnée par année en fonction de la date de commande. Cela permet d’améliorer les performances des requêtes pour une année spécifique.
Conclusion
L’analyse des données par mois et par année est essentielle pour obtenir des insights commerciaux importants. L’utilisation des fonctions d’agrégation SQL permet d’agréger les données de manière simple et efficace. Utilisez des exemples de requêtes concrets et des techniques avancées pour réaliser une analyse de données efficace. En optimisant l’utilisation des index et la rédaction des requêtes, vous pouvez également améliorer considérablement les performances. Utilisez SQL pour soutenir la prise de décision basée sur les données.