Menu
CoddyTech

Ôn tập về nhà thầu bất động sản

Thuộc phần Kiến thức cơ bản trong hành trình SQL của Coddy. Bài học 51 trên 72.

challenge icon

Thử thách

Trung bình

Các bảng và cột hiện có:

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

Một số nhà phân tích dự báo mức tăng trưởng của các tài sản bất động sản. Chúng ta muốn kiểm tra xem dự báo của họ có chính xác không. 

Với mỗi tài sản trong bảng real_estate, hãy tính tỷ lệ giữa value ở ngày mới hơn với giá trị ở ngày cũ hơn.

Ví dụ, nếu một tài sản có giá trị là 5 vào ngày 2022-01-01 và là 10 vào ngày 2022-05-01 thì tỷ lệ đó là 10/5 = 2.

Bỏ qua mọi phép so sánh mà khoảng cách giữa hai ngày nhỏ hơn 101 ngày.

Mỗi tài sản có nhiều ngày nên có nhiều tỷ lệ cần so sánh. Chỉ giữ lại tỷ lệ lớn nhất cho mỗi tài sản.

Cuối cùng, chia tỷ lệ này cho dự báo tương ứng từ bảng potential (gọi trường này là ratio_forecast) rồi sắp xếp kết quả theo thứ tự giảm dần.

Kết quả cuối cùng cần có asset_id và ratio_forecast.

Chỉ giữ lại những tài sản có ratio_forecast lớn hơn 1.

 

Lưu ý: Để phép chia (/) cho kết quả thập phân, đôi khi bạn cần nhân tử số với 1.0.

Ví dụ, thay vì dùng a / b, hãy dùng a * 1.0 / b để nhận kết quả thập phân (khi a và b là biến)

Tự làm thử

-- Truy vấn ngoài: chia số tính ở bên dưới cho số tương ứng trong bảng còn lại
SELECT potential.asset_id, ____ AS ratio_forecast
FROM (
    -- Truy vấn trong: ghép bảng với chính nó để so sánh hàng cũ với hàng mới
    SELECT r1.asset_id, ____ AS ratio
    FROM real_estate AS r1
    JOIN real_estate AS r2 ON ____
    -- Chỉ giữ các cặp có khoảng cách thời gian đủ lớn
    WHERE JULIANDAY(r2.date) - JULIANDAY(r1.date) > ____
    -- Mỗi nhóm có một hàng kết quả, chỉ giữ kết quả so sánh lớn nhất
    GROUP BY r1.asset_id
) AS actual
JOIN potential ON ____
WHERE ratio_forecast > 1
ORDER BY ____

Tất cả bài học trong Kiến thức cơ bản

Tự luyện tập: Playground SQL