Je ne peux pas croire que la réponse acceptée ait autant de votes positifs - c'est une méthode horrible.
Voici la bonne façon de le faire, avec date_trunc :
SELECT date_trunc('month', txn_date) AS txn_month, sum(amount) as monthly_sum
FROM yourtable
GROUP BY txn_month
C'est une mauvaise pratique mais vous pourriez être pardonné si vous utilisez
GROUP BY 1
dans une requête très simple.
Vous pouvez également utiliser
GROUP BY date_trunc('month', txn_date)
si vous ne souhaitez pas sélectionner la date.