This is not simpler but is more scalable:
select *
from crosstab($$
with orders as (
select
customer_id,
date_trunc('month', created_at) created_at,
cast(amount / 100.0 as money) amount
from orders
where
created_at >= '2012-10-01'
and created_at < '2012-12-01'
), months as (
select
c.name,
to_char(o.created_at, 'YYYY-MM') created_at,
sum(o.amount) amount
from
orders o
inner join
customers c on c.id = o.customer_id
group by 1, 2
)
select name, created_at, amount
from months
union all
select name, 'Total', sum(amount)
from months
group by 1, 2
order by 1, 2
$$, $$
select distinct to_char(created_at, 'YYYY-MM')
from orders
where
created_at >= '2012-10-01'
and created_at < '2012-12-01'
union select 'Total'
order by 1
$$
) as (name text, "2012-10" money, "2012-11" money, "Total" money)