Menu
CoddyTech

回顾:房地产承包商

本课属于 Coddy SQL 学习旅程的“基础知识”单元。第 51 课,共 72 课。

challenge icon

挑战

中等

可用的表和列:

  • real_estate: asset_id, value, date
  • potential: asset_id, forecast

一些分析师会预测房地产资产的增长情况。我们想检查他们的预测是否准确。 

对于 每项资产,在 real_estate 表中计算较新日期的 value 与较早日期的值之间的比率。

例如,如果某项资产在 2022-01-01 的值是 5,在 2022-05-01 的值是 10,那么比率就是 10/5 = 2。

忽略两个日期之间相差天数小于 101 的所有比较。

每项资产都有很多日期,因此需要比较很多个比率。只保留每项资产的最大比率。

最后,用这个比率除以 potential 表中对应的预测值(将此字段命名为 ratio_forecast),并按降序排列结果。

最终结果应包含 asset_id 和 ratio_forecast。

只保留 ratio_forecast 大于 1 的资产。

 

注意: 要通过除法运算(/)得到小数结果,有时需要将分子乘以 1.0。

例如,当 a 和 b 是变量时,要得到小数结果,请使用 a * 1.0 / b,而不要使用 a / b

亲手试试

-- 外层查询:用下方算出的数除以另一个表中对应的数
SELECT potential.asset_id, ____ AS ratio_forecast
FROM (
    -- 内层查询:将表与自身配对,以便比较较早的行和较新的行
    SELECT r1.asset_id, ____ AS ratio
    FROM real_estate AS r1
    JOIN real_estate AS r2 ON ____
    -- 只保留时间间隔足够长的配对
    WHERE JULIANDAY(r2.date) - JULIANDAY(r1.date) > ____
    -- 每组只保留一行结果,即比较值最大的一行
    GROUP BY r1.asset_id
) AS actual
JOIN potential ON ____
WHERE ratio_forecast > 1
ORDER BY ____

基础知识中的所有课

自己练习: SQL 在线编辑器