SELECT customer_id AS customer
, string_agg(DISTINCT product_id::text, ', ') AS products
, sum(cost * CASE p.item
WHEN 'BASE' THEN 1
WHEN 'Foo' THEN b.foo
WHEN 'Bar' THEN b.bar
WHEN 'Blarg' THEN b.blarg
END) AS revenue
FROM bought_products b
LEFT JOIN price p USING (product_id)
-- WHERE p.item = ANY ('{BASE,Foo,Bar,Blarg}') -- optional
GROUP BY 1;