【问题标题】:How to replicate the unique key (Unique value in a column against a value in another column) against a record at it's multiple occurrences?如何将唯一键(列中的唯一值与另一列中的值)复制到多次出现的记录中?
【发布时间】:2021-11-03 10:24:41
【问题描述】:

所以我有一个名为dragon 的表,其中包含2 列Pokemon 和Power。我的结果表应该看起来像图片中给出的那样。我如何使用 SQL 做到这一点?我感觉可以使用Join。但我正在努力想出正确的思考过程。

【问题讨论】:

  • 用您正在使用的数据库标记您的问题。
  • 请提供足够的代码,以便其他人更好地理解或重现问题。

标签: sql database validation database-design


【解决方案1】:

如果你想要的只是作为视图的结果

SELECT  
  D.Pokemon, 
  CASE WHEN D.Power IS NOT NULL THEN D.Power ELSE D1.power END
FROM  Dragon D
LEFT JOIN 
 ( 
    SELECT 
      Pokemon, 
      MAX(Power) Power 
    FROM Dragon 
    WHERE Power IS NOT NULL 
    GROUP BY Pokemon) D1
ON D.Pokemon = D1.Pokemon

您也可以使用类似的查询来更新现有的表,如下所示

UPDATE D
SET D.power= D1.power
FROM  Dragon D
    LEFT JOIN 
     ( 
        SELECT 
          Pokemon, 
          MAX(Power) Power 
        FROM Dragon 
        WHERE Power IS NOT NULL 
        GROUP BY Pokemon) D1
    ON D.Pokemon = D1.Pokemon
    WHERE D.Power IS NULL

【讨论】:

    【解决方案2】:

    你可以使用窗口函数:

    select d.*, max(power) over (partition by pokemon) as imputed_power
    from dragon d;
    

    如果你想实际修改数据,那么在标准 SQL 中,你可以使用关联子查询:

    update dragon
        set power = (select max(d2.power) from dragon d2 where d2.pokemon = d.pokemon)
        where power is null;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-17
      • 2016-03-14
      • 1970-01-01
      • 2016-11-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多