PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Trier les mois pendant que je les convertis en texte

Je suggère date_trunc() Au lieu. Il tronque date / timestamp à l'unité donnée.

Pour deux raisons :

  1. 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.

  2. Vous pouvez à la fois ORDER BY et GROUP 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')

Détails dans le manuel.