我目前正试图通过特定邮政编码通配符平均租金。例如,如果20000的邮政编码具有租金值0,则它将替换插入与“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
答案 0 :(得分:1)
对于zip的所有非空值,这个表达式的评估为TRUE,换句话说,"所有这些"" ?
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