Jag kan inte fatta att det accepterade svaret har så många uppröster -- det är en hemsk metod.
Här är det korrekta sättet att göra det, med date_trunc:
SELECT date_trunc('month', txn_date) AS txn_month, sum(amount) as monthly_sum
FROM yourtable
GROUP BY txn_month
Det är dålig praxis men du kan bli förlåten om du använder
GROUP BY 1
i en mycket enkel fråga.
Du kan också använda
GROUP BY date_trunc('month', txn_date)
om du inte vill välja datum.