sql - 从不完整的数据返回结果?

标签 sql postgresql plpgsql

我有两个巨大的表 avg_rentavg_sale。它们包含按位置、公寓大小和其他因素分割的公寓平均价格。这些表中的数据可能不完整。

例如在表 avg_sale 中我可能有:

id  | apartment_size_id | county | city | median_sale
100 | 1                 | 1      | 4    | 800
101 | 4                 | 1      | 4    | 600
102 | 6                 | 1      | 4    | 650

在表 avg_rent 中我可能有:

id  | apartment_size_id | county | city | median_rent
300 | 1                 | 1      | 4    | 300
301 | 2                 | 1      | 4    | 250
302 | 3                 | 1      | 4    | 200
303 | 4                 | 1      | 4    | 250
305 | 6                 | 1      | 4    | 200

我想创建一个 SQL 查询或 plpqsql 函数来聚合 median_salemedian_rentapartment_size_id 列并用 -1 或其他东西填充缺失的数据。如果这个例子会返回这个(总共有 6 个尺寸类别):

apartment_size_id | median_rent | median_sale
1                 | 300         | 800
2                 | 250         | -1
3                 | 200         | -1
4                 | 250         | 600
5                 | -1          | -1
6                 | 200         | 650

我该怎么做?

最佳答案

假设您有一个公寓大小表,您将为此使用left join:

select a.apartment_size_id, coalesce(r.median_rent, -1) as median_rent,
       coalesce(s.median_sales, -1) as median_sales
from apartment_sizes a left join
     avg_rent r
     on a.apartment_size_id = r.apartment_size_id and
        r.county = 1 and r.city = 4 left join
     avg_sale s
     on a.apartment_size_id = s.apartment_size_id and
        s.county = 1 and s.city = 4;

这还假设您需要单个县/市对的信息。

我建议您使用 NULL 而不是 -1 表示缺失值,除非您有充分的理由选择 -1。

关于sql - 从不完整的数据返回结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34251642/

相关文章:

sql - 我应该使用 nvarchar(max) 代替 nvarchar(64) 列还是作为附加列?

sql - Oracle 时间戳 UTC 时间格式

postgresql - 以表名作为参数删除行的函数

java - Plpgsql 函数将 BigInt 转换为 XID 和 java

postgresql - plgpsql - 是否可以声明 setof 记录或表变量?

mysql - 查询返回具有完整总和而不是每行总和的一行

sql - 如果一个或多个表中可能缺少该键,您能否在同一个键上连接三个表?

sql - 针对大量列进行 Un-Pivoting Postgres

postgresql - PostgreSQL中带/不带时区的时间戳之间的区别

sql - 如何获取最近 5 FULL 分钟的数据?