復習 - 不動産請負業者
CoddyのSQLジャーニー「基礎」セクションの一部。レッスン 51/72。
チャレンジ
中級利用可能なテーブルと列:
real_estate:asset_id、value、datepotential:asset_id、forecast
一部のアナリストは、不動産資産の成長がどうなるかを予測します。私たちは、その forecast が正しいかを確認したいと考えています。
各資産について、real_estate テーブル内の newer date の value と older date の value の比率を計算してください。
たとえば、ある資産の 2022-01-01 の value が 5 で、2022-05-01 の value が 10 である場合、that ratio は 10/5 = 2 です。
2つの日付の日数の差が 101 より小さい比較はすべて無視してください。
各資産には多くの日付があるため、比較する ratio も多数あります。各資産について最大の ratio のみを keep してください。
最後に、この ratio を potential テーブルの matching forecast で divide し、このフィールドを ratio_forecast と呼び、結果を降順に並べ替えてください。
最終結果には asset_id と ratio_forecast が含まれている必要があります。
ratio_forecast が 1 より大きい資産のみを Keep してください。
注:divide 操作(/)で小数の結果を得るには、分子に 1.0 を掛ける必要がある場合があります。
たとえば、(a と b が変数の場合)小数の結果を得るには、a / b の代わりに a * 1.0 / 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) > ____
-- グループごとに1つの結果行とし、最大の比較のみを保持する
GROUP BY r1.asset_id
) AS actual
JOIN potential ON ____
WHERE ratio_forecast > 1
ORDER BY ____基礎のすべてのレッスン
自分で練習してみよう: SQLプレイグラウンド