Return 数据不完整造成的?
Return result from incomplete data?
我有两个巨大的 tables avg_rent
和 avg_sale
。它们包含按位置、公寓大小和其他因素细分的公寓平均价格。 table 中的数据可能不完整。
例如 table 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
而在 table 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_sale
、median_rent
和 apartment_size_id
列并使用-1 什么的。在示例的情况下 return 这个(总共有 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
我该怎么做?
您可以使用 full outer join
和 COALESCE
select
r.apartment_size_id,
COALESCE(r.median_rent, -1) as median_rent,
COALESCE(s.median_sale, -1) as median_sale
from avg_rent r
FULL OUTER JOIN avg_sale s
on r.apartment_size_id = s.apartment_size_id
这个查询肯定只给出 avg_rent
和 avg_sale
中出现的那些 apartment_size_id
如果你有一个 apartment
table 包含所有 apartment_size_id
信息,那么你可以对 left join
和 COALESCE
做同样的事情
select
a.apartment_size_id,
COALESCE(r.median_rent, -1) as median_rent,
COALESCE(s.median_sale, -1) as median_sale
from apartment a
LEFT JOIN avg_rent r on a.apartment_size_id = r.apartment_size_id
LEFT JOIN avg_sale s on a.apartment_size_id = s.apartment_size_id
假设您有 table 个公寓大小:
,您将为此使用 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;
这还假定您需要单个 county/city 对的信息。
我建议您使用 NULL
而不是 -1
表示缺失值,除非您有充分的理由选择 -1。
我有两个巨大的 tables avg_rent
和 avg_sale
。它们包含按位置、公寓大小和其他因素细分的公寓平均价格。 table 中的数据可能不完整。
例如 table 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
而在 table 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_sale
、median_rent
和 apartment_size_id
列并使用-1 什么的。在示例的情况下 return 这个(总共有 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
我该怎么做?
您可以使用 full outer join
和 COALESCE
select
r.apartment_size_id,
COALESCE(r.median_rent, -1) as median_rent,
COALESCE(s.median_sale, -1) as median_sale
from avg_rent r
FULL OUTER JOIN avg_sale s
on r.apartment_size_id = s.apartment_size_id
这个查询肯定只给出 avg_rent
和 avg_sale
中出现的那些 apartment_size_id
如果你有一个 apartment
table 包含所有 apartment_size_id
信息,那么你可以对 left join
和 COALESCE
select
a.apartment_size_id,
COALESCE(r.median_rent, -1) as median_rent,
COALESCE(s.median_sale, -1) as median_sale
from apartment a
LEFT JOIN avg_rent r on a.apartment_size_id = r.apartment_size_id
LEFT JOIN avg_sale s on a.apartment_size_id = s.apartment_size_id
假设您有 table 个公寓大小:
,您将为此使用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;
这还假定您需要单个 county/city 对的信息。
我建议您使用 NULL
而不是 -1
表示缺失值,除非您有充分的理由选择 -1。