问题:我们如何生成一个汇总表,显示平均房价(按社区和卧室数量细分)?
解决方案:这涉及使用 PostgreSQL 的 crosstab
函数(来自 tablefunc
扩展)的两步过程。
<code class="language-sql">SELECT neighborhood, bedrooms, AVG(price) AS average_price FROM listings GROUP BY neighborhood, bedrooms ORDER BY neighborhood, bedrooms;</code>
crosstab
函数: 接下来,我们将步骤 1 的结果输入到 crosstab
函数中。 该函数将数据转换为数据透视表。 第二个参数指定我们想要作为列的卧室计数。 请注意,如果您尚未安装 tablefunc
扩展,则需要安装 (CREATE EXTENSION tablefunc;
)。<code class="language-sql">SELECT * FROM crosstab( 'SELECT neighborhood, bedrooms, AVG(price)::int AS average_price FROM listings GROUP BY neighborhood, bedrooms ORDER BY neighborhood, bedrooms', $$SELECT unnest('{0,1,2,3}'::int[]) AS bedrooms$$ ) AS ct ("neighborhood" text, "0" int, "1" int, "2" int, "3" int);</code>
此查询生成一个数据透视表,其中以街区为行,以 0、1、2 和 3 间卧室的平均价格为列。 请记住调整 '{0,1,2,3}'
数组以反映 listings
表中存在的实际卧室数量。 ::int
强制转换确保平均价格被视为整数;您可能需要根据您的 price
列的数据类型进行调整。
以上是如何在 PostgreSQL 中创建按社区和卧室数量显示平均房价的数据透视表?的详细内容。更多信息请关注PHP中文网其他相关文章!