比较另一个 id 下属于不同 ids 组的行并将结果打印在单独的列中

Posted

技术标签:

【中文标题】比较另一个 id 下属于不同 ids 组的行并将结果打印在单独的列中【英文标题】:Compare rows which belongs to different ids group under another id and print a result in a separate column 【发布时间】:2020-07-16 09:23:23 【问题描述】:

我正在寻找一种 SQL 查询解决方案,该解决方案可以让我比较不同的属性及其值,它们在行中,用于分组在父 ID 下的不同 ID。我想在单独的列中打印结果是否匹配。下面的屏幕截图包含数据和以红色标记的所需结果。

在此处添加我从 GMB 运行查询时得到的结果。我还添加了 Excpected_Result 列,以便我们可以轻松查看差异: GMB query vs expected result

【问题讨论】:

我目前正在尝试使用 CASE WHEN 语句解决问题,但目前似乎无法按预期工作 随时提供您的尝试,以便我们指出可能的改进或解释您的查询为何不起作用 【参考方案1】:

您可以使用窗口函数和条件表达式:

select
    t.*,
    case when count(*) over(partition by attributeName, attributeValue) > 1 
        then 'True'
        else 'False'
    end has_match
from mytable t

【讨论】:

嗨。仍然没有按预期工作。我在上面添加了一个屏幕截图,以便我们可以看到 Expected_Result 和 has_match 列之间的差异。【参考方案2】:

如果你的表不是太大,你可以像这样在 GroupNumber 和 AttributeName 上加入它自己:

SELECT 

t1.AttributeName, t1.AttributeValue, t2.AttributeValue, CASE WHEN t1.AttributeValue = t2.AttributeValue THEN 'TRUE' ELSE 'FALSE' END as Result

FROM Table AS t1
     INNER JOIN Table AS t2 ON t1.GroupNumber = t2.GroupNumber AND t1.AttributeName = t2.AttributeName

【讨论】:

感谢您,Artur,您的快速反应。它不像我期望的那样工作,但也许我不太清楚我试图实现的目标 - 我需要将一组 id 中的 AttributeValue 与驻留在同一任务/父 id 中的另一个 id 进行比较,你可以说.例如。来自 ID:888 的 NAME 应该与来自 ID:777 的 NAME 进行比较,如果匹配则打印两者 TRUE

以上是关于比较另一个 id 下属于不同 ids 组的行并将结果打印在单独的列中的主要内容,如果未能解决你的问题,请参考以下文章

比较数组中的值计算它们并合并表中的行

根据另一个表中的条件计算表中的行数

计算 Octave 中行组的列的平均值

Mysql根据不同的行更新表中的行值

为spark scala中的数据框中的每个组采样不同数量的随机行

MySQL 从另一个表连接和 COUNT(*)