假设我在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

最佳答案

首先使用聚合函数avg()计算平均值:

SELECT neighborhood, bedrooms, avg(price)
FROM   listings
GROUP  BY 1,2
ORDER  BY 1,2

然后按照此相关答案中的详细说明将结果提供给crosstab()函数:
  • PostgreSQL Crosstab Query
  • 07-24 21:16