我有两张桌子。第一个表名为 price_changes ,而另一个表名为 area 。 price_changes 的结构是:
**listing_id** **old_price** **new_price** **change_date**
240509 180999 100234 2016-03-30
230599 165789 189760 2017-06-12
245678 123456 176432 2016-12-08
此处 listing_id , old_price , new_price 为整数,而 change_date 为正文。
下一个区域表格的结构如下:
**listing_id** **built_area**, **used_area**
240509 340 0
230599 0 789
245678 125 175
此处 listing_id , built_area , used_area 都是整数值。
我想制作的Sql查询无法执行此操作:
计算2016年建成或使用面积增加的物业的平均平方米价格> 200.这里的平均平方米价格意味着将 built_area 和 used_area 相加以形成一个名为 total_area 的新列,并且我必须使用的价格 increase_price 列。
我尝试使用嵌套查询来执行此操作但未成功。我提出的嵌套查询是
SELECT listing_id FROM fast_course_reg。price changes
其中new_price> old_price和change_date
比如'2016%'和listing_id in
(从built_area> 200或used_area> 200的区域中选择listing_id);
但问题是嵌套查询不允许在嵌套部分中添加多个列。使用Join,我不知道怎么做,因为内连接不允许从两个表中选择多个列。
答案 0 :(得分:1)
获取2016年价格上涨的房产:
select listing_id, max(new_price)
from price_changes
where old_price < new_price and change_date >= '2016-01-01' and
change_date < '2017-01-01'
group by listing_id;
然后,您可以将其用作子查询来获取平均值。结果是这样的:
select sum(new_price) / sum(built_area + used_area)
from (select listing_id, max(new_price) as new_price
from price_changes
where old_price < new_price and change_date >= '2016-01-01' and
change_date < '2017-01-01'
group by listing_id
) l join
area a
using (listing_id)
where built_area > 200 or used_area > 200;