假设我在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相关问答推荐

PostgreSQL:如何 for each 唯一的客户输入/更新列中的数据,并将其递增1直到表的末尾

端口5432失败:致命:数据库xxx&不存在.在PostgreSQL数据库中

如何使用docker/docker-compose转到本地主机?

正在应用序列化迁移,但数据库没有更改

使用jOOQ在postgres上取消嵌套enum_range

supabase 中的交易

Postgres 生成的列不是不可变的

使用 select 在带有特殊字符的字符串中查找数据

如何计算过滤器中的百分比

Postgres 低估了导致错误查询计划的行数

查找列中的数据是否满足sql中的数据类型条件

PG::UndefinedTable:错误:relation "active_storage_blobs" does not exist

安装 pg gem 失败,mkmf.rb 找不到 ruby​​ 的头文件(Mac OSX 10.6.5)

如何查询存储在数组中的 Rails ActiveRecord 数据

使用 postgres regexp_replace 将字符串列表替换为始终相同的字符串

与 Oracle 的 CONNECT BY ... START WITH 等效的 PostgreSQL 语法是什么?

如何增加 max_locks_per_transaction

在 postgresql 中将 bool 转换为 int

docker postgres 无法从指定端口启动

Oracle 相当于 Postgres 的 DISTINCT ON?