在 PostgreSQL 中生成数据透视表来分析房价
PostgreSQL 提供强大的数据汇总功能,包括创建数据透视表。此示例演示如何生成数据透视表,显示按社区和卧室数量分组的平均房价。
第 1 步:计算每个社区的平均价格和卧室数量
首先,我们计算每个独特的社区和卧室数量组合的平均价格:
<code class="language-sql">SELECT neighborhood, bedrooms, AVG(price) AS avg_price FROM listings GROUP BY neighborhood, bedrooms ORDER BY neighborhood, bedrooms;</code>
此查询按 listings
和 neighborhood
对 bedrooms
表数据进行分组,计算每组的平均值 price
。 为了清楚起见,然后对结果进行排序。
第 2 步:使用 crosstab()
为了将聚合数据转换为数据透视表格式,我们使用 crosstab()
函数:
<code class="language-sql">SELECT * FROM crosstab( 'SELECT neighborhood, bedrooms, avg_price FROM ( SELECT neighborhood, bedrooms, AVG(price) AS avg_price FROM listings GROUP BY neighborhood, bedrooms ORDER BY neighborhood, bedrooms )', $$SELECT unnest('{0,1,2,3}'::int[])::text$$ ) AS ct ("neighborhood" text, "0" int, "1" int, "2" int, "3" int);</code>
crosstab()
函数采用两个参数:提供聚合数据的 SQL 查询(为了清楚起见,在本例中嵌套),以及定义数据透视表列类别的查询(此处表示卧室数量:0、 1、2 和 3)。 生成的表别名 ct
相应地分配了列名称。
第 3 步:解释结果
输出数据透视表将类似于以下内容:
<code>neighborhood | 0 | 1 | 2 | 3 ----------------+---------+---------+---------+--------- downtown | 189000 | 325000 | NULL | 450000 riverview | 250000 | 300000 | 350000 | NULL</code>
每一行代表一个社区,每列代表一个卧室数量。 这些值代表特定社区和卧室组合的平均价格。 NULL
表示未找到该特定组合的列表。 这提供了平均房价的清晰简洁的总结。 如果您的数据包含不同范围的卧室数量,请记住在 unnest
函数中调整卧室类别。
以上是如何在 PostgreSQL 中创建数据透视表来按社区和卧室数量汇总平均房价?的详细内容。更多信息请关注PHP中文网其他相关文章!