Menu
Coddy logo textTech

Recap - Real Estate Contractor

Teil des Abschnitts Grundlagen der SQL-Journey von Coddy. Lektion 51 von 72.

challenge icon

Aufgabe

Mittel

Verfügbare Tabellen und Spalten:

  • <strong>real_estate</strong>: <strong>asset_id</strong>, <strong>value</strong>, <strong>date</strong>
  • <strong>potential</strong>: <strong>asset_id</strong>, <strong>forecast</strong>

Einige Analysten prognostizieren das Wachstum von Immobilienwerten. Wir möchten überprüfen, ob ihre Prognose zutrifft. 

Berechnen Sie für jedes Asset in der Tabelle real_estate das Verhältnis zwischen dem value eines neueren Datums und dem Wert eines älteren Datums.

Wenn beispielsweise ein Asset am 2022-01-01 den Wert 5 und am 2022-05-01 den Wert 10 hatte, beträgt dieses Verhältnis 10/5 = 2.

Ignorieren Sie alle Vergleiche, bei denen die Tagesdifferenz zwischen den beiden Daten kleiner als 101 ist.

Es gibt viele Daten für jedes Asset, daher gibt es viele Verhältnisse zu vergleichen. Behalten Sie nur das größte Verhältnis für jedes Asset.

Teilen Sie dieses Verhältnis schlussendlich durch die passende Prognose aus der Tabelle potential (nennen Sie dieses Feld ratio_forecast) und sortieren Sie die Ergebnisse in absteigender Reihenfolge.

Das Endergebnis sollte asset_id und ratio_forecast enthalten.

Behalten Sie nur die Assets, bei denen ratio_forecast größer als 1 ist.

 

Hinweis: Um bei einer Division (/) ein Dezimalergebnis zu erhalten, müssen Sie den Zähler manchmal mit 1.0 multiplizieren.

Verwenden Sie beispielsweise anstelle von a / b die Schreibweise a * 1.0 / b, um das Dezimalergebnis zu erhalten (wenn a und b Variablen sind)

Probier es selbst

-- Äußere Abfrage: teile die unten berechnete Zahl durch die passende aus der anderen Tabelle
SELECT potential.asset_id, ____ AS ratio_forecast
FROM (
    -- Innere Abfrage: verbinde die Tabelle mit sich selbst, sodass eine ältere Zeile mit einer neueren verglichen werden kann
    SELECT r1.asset_id, ____ AS ratio
    FROM real_estate AS r1
    JOIN real_estate AS r2 ON ____
    -- Behalte nur die Paare, die zeitlich weit genug auseinander liegen
    WHERE JULIANDAY(r2.date) - JULIANDAY(r1.date) > ____
    -- Eine Ergebniszeile pro Gruppe, behalte nur den einzelnen größten Vergleich
    GROUP BY r1.asset_id
) AS actual
JOIN potential ON ____
WHERE ratio_forecast > 1
ORDER BY ____

Alle Lektionen in Grundlagen

Übe selbstständig: SQL-Playground