Menu
Coddy logo textTech

Recap - Real Estate Contractor

Parte de la sección Fundamentos del Journey de SQL de Coddy. Lección 51 de 72.

challenge icon

Desafío

Intermedio

Tablas y columnas disponibles:

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

Algunos analistas pronostican cuál va a ser el crecimiento de los activos inmobiliarios. Queremos comprobar si su pronóstico es cierto. 

Para cada activo en la tabla real_estate, calcula la proporción entre el value de una fecha más reciente y el valor de una fecha más antigua.

Por ejemplo, si hay un activo cuyo valor al 2022-01-01 era 5 y al 2022-05-01 era 10, entonces esa proporción es 10/5 = 2.

Ignora todas las comparaciones en las que la diferencia de días entre las dos fechas sea menor que 101.

Hay muchas fechas para cada activo, por lo que hay muchas proporciones para comparar. Conserva solo la proporción más grande para cada activo.

Finalmente, divide esta proporción con el pronóstico correspondiente de la tabla potential (llama a este campo ratio_forecast) y ordena los resultados en orden descendente.

El resultado final debe tener el asset_id y ratio_forecast.

Conserva solo los activos donde el ratio_forecast sea mayor que 1.

 

Nota: Para obtener una solución decimal de la operación de división (/), a veces necesitas multiplicar el numerador por 1.0.

Por ejemplo, en lugar de a / b utiliza a * 1.0 / b para obtener el resultado decimal (cuando a y b son variables)

Pruébalo tú mismo

-- Consulta externa: divide el número calculado abajo por el correspondiente de la otra tabla
SELECT potential.asset_id, ____ AS ratio_forecast
FROM (
    -- Consulta interna: empareja la tabla consigo misma para que una fila más antigua pueda compararse con una más nueva
    SELECT r1.asset_id, ____ AS ratio
    FROM real_estate AS r1
    JOIN real_estate AS r2 ON ____
    -- Mantén solo los pares que están lo suficientemente separados en el tiempo
    WHERE JULIANDAY(r2.date) - JULIANDAY(r1.date) > ____
    -- Una fila de resultado por grupo, manteniendo solo la comparación más grande
    GROUP BY r1.asset_id
) AS actual
JOIN potential ON ____
WHERE ratio_forecast > 1
ORDER BY ____

Todas las lecciones de Fundamentos

Practica por tu cuenta: Playground de SQL