Создание сводной таблицы с PostgreSQL
Предположим, что у меня есть таблица в Postgres, называемая listings
, которая выглядит так:
id neighborhood bedrooms price
1 downtown 0 256888
2 downtown 1 334000
3 riverview 1 505000
etc.
Как написать запрос кросс-таблицы, который показывает среднюю цену за спальню как столбцы и кварталы как строки?
Результат запроса должен выглядеть примерно так (цифры составлены, столбцы - это спальни):
0 1 2 3
riverton 250000 300000 350000 -
downtown 189000 325000 - 450000
Ответы
Ответ 1
Сначала вычислите среднее значение с помощью агрегатной функции avg():
SELECT neighborhood, bedrooms, avg(price)
FROM listings
GROUP BY 1,2
ORDER BY 1,2
Затем подайте результат в функцию crosstab()
, как это подробно описано в этом связанном ответе: