Sugiro
date_trunc()
em vez de. Ele trunca date
/ timestamp
para a unidade indicada. Por dois motivos:
-
Você deseja que o número de pedidos em agosto de um determinado ano, como 2012, não a soma de agosto de todos os anos na tabela.date_trunc('month', orderdate)
faz exatamente isso e evita que você misture vários anos por acidente. Você obtém várias linhas por vários anos.
-
Você podeORDER BY
eGROUP BY
essa expressão, a consulta é um pouco mais rápida.
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<>fiddle aqui
Antigo sqlfiddle
Para nomes de meses completos, como seu primeiro exemplo implica:
to_char(date_col, 'Month')
Para nomes localizados em outros idiomas:
to_char(date_col, 'TMMonth')
Detalhes no manual.