首页 > 数据库 > mysql教程 > 如何透视 PostgreSQL 表以显示按卧室和社区划分的平均价格?

如何透视 PostgreSQL 表以显示按卧室和社区划分的平均价格?

Barbara Streisand
发布: 2025-01-13 08:26:42
原创
826 人浏览过

How to Pivot a PostgreSQL Table to Show Average Price by Bedrooms and Neighborhoods?

在PostgreSQL中创建透视表

PostgreSQL 使用 crosstab() 函数创建透视表。此函数接受两个输入:一个查询和一个列名列表。查询应生成一个包含两列的结果集:一列用于行标题,另一列用于数据值。列名列表应与应进行透视的结果集中的列相对应。

问题:

考虑名为 listings 的下表:

id neighborhood bedrooms price
1 downtown 0 189000
2 downtown 3 450000
3 riverview 1 300000
4 riverview 0 250000
5 downtown 1 325000
6 riverview 2 350000

如何创建一个透视表查询,以卧室数量作为列,社区作为行,显示每个卧室的平均价格?

所需输出应格式化如下:

neighborhood 0 1 2 3
downtown 189000 325000 - 450000
riverview 250000 300000 350000 -

解决方案:

要创建透视表,请按照以下步骤操作:

  1. 计算平均值: 使用 avg() 聚合函数计算每个社区和卧室数量组合的平均价格。

    <code class="language-sql"> SELECT
       neighborhood,
       bedrooms,
       avg(price)
     FROM
       listings
     GROUP BY
       1, 2
     ORDER BY
       1, 2;</code>
    登录后复制
  2. 将结果提供给 crosstab(): 将上一步查询的结果提供给 crosstab() 函数。使用 $$...$$ 指定列名的值数组。您可以将平均值转换为整数以获得四舍五入的结果。

    <code class="language-sql"> SELECT
       *
     FROM
       crosstab(
         'SELECT
           neighborhood,
           bedrooms,
           avg(price)::int
         FROM
           listings
         GROUP BY
           1, 2
         ORDER BY
           1, 2;',
         $$SELECT unnest('{0,1,2,3}'::int[])$$
       ) AS ct (
         "neighborhood" text,
         "0" int,
         "1" int,
         "2" int,
         "3" int
       );</code>
    登录后复制

此查询通过在每个社区内对不同卧室的平均价格进行透视,生成所需的透视表。

This revised response maintains the original image and rephrases the text to achieve a similar meaning while avoiding verbatim copying. Key phrases and structural elements are altered, but the core information remains intact.

以上是如何透视 PostgreSQL 表以显示按卧室和社区划分的平均价格?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板