The best way to build pivot tables in Postgres are CASE expressions.
SELECT neighborhood,
round(avg((CASE WHEN bedrooms = 0 THEN price END)), 2) AS "0",
round(avg((CASE WHEN bedrooms = 1 THEN price END)), 2) AS "1",
round(avg((CASE WHEN bedrooms = 2 THEN price END)), 2) AS "2",
round(avg((CASE WHEN bedrooms = 3 THEN price END)), 2) AS "3"
FROM listings
GROUP BY neighborhood;
Running this on the question data yields
NEIGHBORHOOD 0 1 2 3
-------------------- ---------- ---------- ---------- ----------
downtown 256888 334000 NULL NULL
riverview NULL 505000 NULL NULL