mysql - 查询以根据其他列获取最接近的匹配值

标签 mysql sql

根据下面的表 1,我尝试编写一个查询,允许我创建一个新表,用基于城市、国家和地区的最接近匹配项填充空的 companyID。

表 1 是示例表,而表 2 是预期输出。

表一

Cust | City | Country | Region | CompanyID
ABC  |   KL |      MY |   APAC | 123456
ABC  |   KL |      MY |   APAC | 
ABC  |   JB |      MY |   APAC | 
ABC  |   SY |      AU |   APAC | 778899
ABC  |   ME |      AU |   APAC | 
GHI  |   DB |      AE |   EMEA | 112233
GHI  |   AD |      AE |   EMEA |

表2

Cust | City | Country | Region | CompanyID
ABC  |   KL |      MY |   APAC | 123456
ABC  |   KL |      MY |   APAC | 123456
ABC  |   JB |      MY |   APAC | 123456
ABC  |   SY |      AU |   APAC | 778899
ABC  |   ME |      AU |   APAC | 778899
GHI  |   DB |      AE |   EMEA | 112233
GHI  |   AD |      AE |   EMEA | 112233

感觉有点像 VLOOKUP,但不确定如何开始。将真诚地感谢任何帮助。

谢谢!

最佳答案

在子查询中。或使用 with 创建所有默认值的内联 View 。然后外连接到那些默认值。

我首先创建了一个名为 usr_test_table 的表,它具有与上述相同的数据。请注意,我的数据库是 oracle,所以不要被“from dual”混淆。那是oracle中的一个特殊的表,一列一行。

select t1.cust, t1.city, t1.country, t1.region,
       case 
           when t1.companyid is not null then t1.companyid
           else (
                   select max(companyid)
                   from usr_test_table t2
                   where t2.country = t1.country
               )
       end companyid
from usr_test_table t1

它比之前关于外连接到内联 View 的评论稍微简单一些。由于现在数据库允许在 select 子句中使用子查询,因此这种情况更容易处理。

关于mysql - 查询以根据其他列获取最接近的匹配值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55392880/

相关文章:

sql - 如何将多个值代替单个值传递给存储过程

sql - 将字符串转换为日期并在给定字符串无效时引发异常

php - 将 sql 表结果限制为仅选定的结果

php - 当一张表为空或非空时选择两张表

mysql - 阻止除一个用户之外的任何用户访问表

mysql - 按日期时间字段对数据进行分组

java - Class.forName 上的 ClassNotFoundException ("com.mysql.jdbc.Driver");

mysql - "-log"在 MySQL 版本中代表什么?

php - MYSQL查询每次都出错

mysql - SQL查询查找每个零件价格最低的供应商