SQL выполняет действие для каждой строки, которая соответствует условию

0

Вот sqlfiddle

В настоящее время я пытаюсь усреднить аренду по определенному шаблону почтового индекса. Например, если 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
Теги:

1 ответ

1
Лучший ответ

не будет ли это выражение оцениваться как 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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню