Maison >base de données >tutoriel mysql >Comment regrouper les données SQL par mois et par année et formater la sortie en « mois-année » ?
Regroupement SQL par mois et année
En SQL, le regroupement des données par mois et par année est une tâche courante lors de l'analyse de données temporelles. Pour y parvenir, vous pouvez utiliser les fonctions MOIS() et ANNÉE() ainsi que la clause GROUP BY.
Énoncé du problème
Un utilisateur rencontre un problème lors d'une requête un tableau Commande pour afficher la colonne « date » sous la forme « mois-année » (par exemple, « 9-2011 »). Ils utilisent la requête suivante :
SELECT MONTH(date) + '.' + YEAR(date) AS Mjesec, SUM(marketingExpense) AS SumaMarketing, SUM(revenue) AS SumaZarada FROM [Order] WHERE (idCustomer = 1) AND (date BETWEEN '2001-11-3' AND '2011-11-3') GROUP BY MONTH(date), YEAR(date)
Cependant, cette requête n'affiche que les mois (par exemple, "9"), et l'utilisateur souhaite inclure à la fois le mois et l'année dans le résultat.
Solution
Pour résoudre ce problème, vous pouvez utiliser la fonction CAST() pour convertir les valeurs du mois et de l'année en chaînes et concaténez-les avec un trait d’union entre les deux. Voici la requête mise à jour :
SELECT CAST(MONTH(date) AS VARCHAR(2)) + '-' + CAST(YEAR(date) AS VARCHAR(4)) AS Mjesec, SUM(marketingExpense) AS SumaMarketing, SUM(revenue) AS SumaZarada FROM [Order] WHERE (idCustomer = 1) AND (date BETWEEN '2001-11-3' AND '2011-11-3') GROUP BY CAST(MONTH(date) AS VARCHAR(2)) + '-' + CAST(YEAR(date) AS VARCHAR(4))
Cette requête renverra la colonne « date » dans le format souhaité, affichant à la fois le mois et l'année.
Une autre option consiste à utiliser des zéros non significatifs lors de la diffusion vers assurer un formatage cohérent. Ceci peut être réalisé en utilisant la fonction right() :
GROUP BY CAST(YEAR(date) AS VARCHAR(4)) + '-' + right('00' + CAST(MONTH(date) AS VARCHAR(2)), 2)
Cette approche ajoutera des zéros non significatifs aux valeurs de mois à un chiffre, ce qui entraînera un formatage uniforme (par exemple, "09-2011").
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!