Non posso credere che la risposta accettata abbia così tanti voti positivi:è un metodo orribile.
Ecco il modo corretto per farlo, con date_trunc:
SELECT date_trunc('month', txn_date) AS txn_month, sum(amount) as monthly_sum
FROM yourtable
GROUP BY txn_month
È una cattiva pratica, ma potresti essere perdonato se usi
GROUP BY 1
in una query molto semplice.
Puoi anche usare
GROUP BY date_trunc('month', txn_date)
se non vuoi selezionare la data.