В настоящее время я пытаюсь усреднить аренду по определенному шаблону почтового индекса. Например, если zipcode для 20000 имеет значение аренды 0, вместо него вместо этого будет добавлена средняя рента для (ненулевых) zipcodes, соответствующих шаблону "20%". В настоящее время, однако, он усредняет все арендные ставки, независимо от шаблона. Вот что я получаю:
rent zip
2375 20000
1000 20001
2000 20002
5000 30000
1500 20003
2375 30001
но это то, что я хочу:
rent zip
1500 20000
1000 20001
2000 20002
5000 30000
1500 20003
5000 30001
Вот мой текущий запрос:
SELECT IF(tmp.rent=0,
(select AVG(rent) from tmp where rent > 0 and zip LIKE CONCAT(substr(zip,1,2),'%')),
tmp.rent) as rent,
zip
from tmp
не будет ли это выражение оцениваться как TRUE для всех ненулевых значений zip, другими словами, "все из них"?
zip LIKE CONCAT(substr(zip,1,2),'%'))
Похоже, вы хотите квалифицировать одну из этих ссылок столбцов, поэтому она ссылается на столбец из внешнего запроса. Это хорошая практика, чтобы квалифицировать все ссылки на колонки.
SELECT IF( t.rent=0
, ( SELECT AVG(s.rent)
FROM tmp s
WHERE s.rent > 0
AND s.zip LIKE CONCAT(SUBSTR(t.zip,1,2),'%')
)
, t.rent
) AS rent
, t.zip
FROM tmp t