Suggerisco date_trunc()
invece. Tronca date
/ timestamp
all'unità data.
Per due motivi:
-
Vuoi il numero di ordini nell'agosto di un anno particolare, come il 2012, non la somma di agosto di tutti gli anni in tabella.
date_trunc('month', orderdate)
fa esattamente questo e impedisce che tu mescoli più anni per caso. Ottieni più righe per più anni. -
Puoi entrambi
ORDER BY
eGROUP BY
questa espressione, la query è un po' più veloce.
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<>violino qui
Vecchio sqlfiddle
Per i nomi di mesi interi, come suggerisce il tuo primo esempio:
to_char(date_col, 'Month')
Per nomi localizzati non inglesi:
to_char(date_col, 'TMMonth')