fix(ptica): нет сделок за окно — цена не 0 ₽/м², а «нет данных» (#2464-B) (#2868)
This commit is contained in:
parent
165dda599f
commit
53bb769ea5
1 changed files with 18 additions and 3 deletions
|
|
@ -192,15 +192,30 @@ _INLINE_VELOCITY_SQL = text("""
|
||||||
SELECT
|
SELECT
|
||||||
a.room_bucket,
|
a.room_bucket,
|
||||||
SUM(a.deals_window) AS deals_window,
|
SUM(a.deals_window) AS deals_window,
|
||||||
|
-- Здесь COALESCE(...,0) ОСТАЁТСЯ намеренно: TopLayoutRow.avg_area_m2
|
||||||
|
-- объявлен как float (не Optional), и NULL ронял бы контракт API.
|
||||||
|
-- Пустые комнатности получают площадь 0 м², и это тоже неправда — но
|
||||||
|
-- честный NULL требует правки схемы + перегенерации типов фронта
|
||||||
|
-- и решения, что писать в area_bin. Отдельным заходом: #2867.
|
||||||
COALESCE(
|
COALESCE(
|
||||||
SUM(a.area_weighted_sum)
|
SUM(a.area_weighted_sum)
|
||||||
/ NULLIF(SUM(a.deals_window), 0),
|
/ NULLIF(SUM(a.deals_window), 0),
|
||||||
0
|
0
|
||||||
)::numeric(10, 2) AS avg_area_m2,
|
)::numeric(10, 2) AS avg_area_m2,
|
||||||
COALESCE(
|
-- #2464-B: БЕЗ COALESCE(...,0). Сделок за окно нет → делитель NULL →
|
||||||
|
-- средней цены нет, и это NULL, а не «0 ₽/м²». Схема так и объявлена
|
||||||
|
-- (TopLayoutRow.avg_price_per_m2_rub: float | None), и Python ниже уже
|
||||||
|
-- умеет None (пропускает строку во взвешенном роллапе) — но COALESCE
|
||||||
|
-- делал эту ветку недостижимой.
|
||||||
|
-- Замер 13.08 по проду, окно 6 месяцев. Сработает ноль или нет — зависит
|
||||||
|
-- от того, сколько замапленных проектов попало в радиус, поэтому цифры
|
||||||
|
-- по слоям: у 616 проектов 2083 пары (проект × комнатность), пустых 635;
|
||||||
|
-- 323 проекта имеют хотя бы одну пустую комнатность, 80 — пустые ВСЕ.
|
||||||
|
-- При объединении по два пустых остаётся 255 из 1267, по всему городу —
|
||||||
|
-- ноль. То есть чем беднее окрестность участка, тем чаще выдумывался 0.
|
||||||
|
(
|
||||||
SUM(a.price_weighted_sum)
|
SUM(a.price_weighted_sum)
|
||||||
/ NULLIF(SUM(a.deals_window), 0),
|
/ NULLIF(SUM(a.deals_window), 0)
|
||||||
0
|
|
||||||
)::numeric(12, 2) * 1000.0 AS avg_price_per_m2_rub,
|
)::numeric(12, 2) * 1000.0 AS avg_price_per_m2_rub,
|
||||||
array_agg(DISTINCT a.project_name) AS matched_project_names,
|
array_agg(DISTINCT a.project_name) AS matched_project_names,
|
||||||
MIN(a.window_start) AS window_start,
|
MIN(a.window_start) AS window_start,
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue