Je suggère date_trunc()
Au lieu. Il tronque date
/ timestamp
à l'unité donnée.
Pour deux raisons :
-
Vous voulez le nombre de commandes en août d'une année particulière, comme 2012, pas la somme pour le mois d'août de toutes les années du tableau.
date_trunc('month', orderdate)
fait exactement cela et empêche que vous mélangez plusieurs années par accident. Vous obtenez plusieurs lignes pour plusieurs années. -
Vous pouvez à la fois
ORDER BY
etGROUP BY
cette seule expression, la requête est un peu plus rapide.
SELECT to_char(date_trunc('month', orderdate), 'Mon') AS "Month" -- repeat expr.
,count(*) AS "Quantity"
FROM orders
GROUP BY date_trunc('month', orderdate) -- 1 item covers it
ORDER BY date_trunc('month', orderdate);
db<>violon ici
Ancien sqlfiddle
Pour les noms de mois complets, comme votre premier exemple l'implique :
to_char(date_col, 'Month')
Pour les noms localisés non anglais :
to_char(date_col, 'TMMonth')