首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQL在Meets条件下的每一行上执行操作

SQL在Meets条件下的每一行上执行操作
EN

Stack Overflow用户
提问于 2018-01-11 20:41:18
回答 1查看 41关注 0票数 0

这是琴

我目前正试图在一个特定的邮政编码通配符上平均租金。例如,如果20000的邮政编码的租金值为0,则它将插入与“20%”通配符匹配的(非零)邮政编码的平均租金。然而,目前,它正在平均所有的租金,不管通配符。我得到的是:

代码语言:javascript
运行
复制
rent    zip
2375    20000
1000    20001
2000    20002
5000    30000
1500    20003
2375    30001

但这正是我想要的:

代码语言:javascript
运行
复制
rent    zip
1500    20000
1000    20001
2000    20002
5000    30000
1500    20003
5000    30001

下面是我当前的查询:

代码语言:javascript
运行
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-11 20:50:23

对于zip的所有非空值(换句话说,“所有这些值”),这个表达式不都是TRUE吗?

代码语言:javascript
运行
复制
 zip LIKE CONCAT(substr(zip,1,2),'%'))

似乎您希望限定其中一个列引用,因此它引用了外部查询中的一个列。对所有列引用进行限定是很好的做法。

代码语言:javascript
运行
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48215471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档