在MySQL中按定义的条件分组

时间:2019-02-08 21:26:02

标签: mysql

我有一个如下表。当Type = Forecast时,将填充所有值。 当Type = Sales时,所有区域均为NULL。

回顾一下“预测”,每个ID只能映射到一个地区。但是,在某些情况下,可以将2个区域映射到一个ID。如果发生这种情况,那么我只想关注第一个区域。

还请注意,Type = Forecast中可能存在ID,而Type = Sales中却没有ID,

TABLE 1
ID    Region   Type
123xy   ASPAC    Forecast
123xy   ASPAC    Forecast
456za   ASPAC    Forecast
456za   EMEA     Forecast
789sw   LATAM    Forecast
789sw   EMEA     Forecast
999ww   NORTH    Forecast
123xy            Sales
123xy            Sales
456za            Sales
789sw            Sales
111xx            Sales

我的预期输出将是:

TABLE 2: Expected Output
ID    Region   Type
123xy   ASPAC    Forecast
123xy   ASPAC    Forecast
456za   ASPAC    Forecast
456za   EMEA     Forecast
789sw   LATAM    Forecast
789sw   EMEA     Forecast
999ww   NORTH    Forecast
123xy   ASPAC    Sales
123xy   ASPAC    Sales
456za   ASPAC    Sales
789sw   LATAM    Sales
789sw   LATAM    Sales
111xx            Sales

理想情况下,期望的输出将使用Sales中Region的新填充值更改/更新表。 但是,我不确定如何以最有效的方式进行此操作?我当时正在考虑将类型=预测的所有数据插入到另一个表中,按ID和区域将它们分组,删除所有重复项,然后进行LEFT JOIN TABLE 1 vs TEMP表。

1 个答案:

答案 0 :(得分:0)

获取ID的最小值,将其再次与表连接,并为那些未定义Region的字段使用最小值行。

select t1.ID, ifnull(t1.Region, t.Region), t1.Type
from table1 t1
  join (
    select t2.Region, min(ID) as ID
    from table1 t2
    group by t2.Region
  ) t on t.ID=t1.ID 

请参见SQLFiddle