【问题标题】:How do I report the results for a test that matches ID's across different sources?如何报告与不同来源的 ID 匹配的测试结果?
【发布时间】:2021-05-04 04:02:04
【问题描述】:

一个 ID 可以存在于多个 SOURCE 中。我需要测试相同 ID 的 VALUE 是否在不同的源中匹配。如果它们并非在所有来源中都匹配,则应返回 FALSE。

CREATE TABLE example_table
(
    SOURCE varchar(255),  
    ID varchar(255),
    VALUE varchar(255)
);

INSERT INTO example_table (SOURCE, ID, VALUE)
VALUES ('A', 1, 55), ('A', 2, 36), ('B', 1, 55), ('B', 2, 34);

使用上面的代码,我希望查询返回以下内容:

ID    MATCH
1     TRUE
2     FALSE

这有点像“大数据”问题,因为有数百万个 ID 和大约 50 个左右的来源。正在为 Vertica 9.2 编写查询。

【问题讨论】:

  • 在您的问题中,您提到了相同 id 的值,因此您还需要通过包含值列来修改预期输出。

标签: sql vertica


【解决方案1】:

你可以使用聚合:

select et.id,
       (case when min(value) = max(value) then 'true' else 'false' end) as match
from example_table et
group by et.id;

您可以将其简化为:

select et.id,
       (min(value) = max(value)) as match
from example_table et
group by et.id;

【讨论】:

    【解决方案2】:

    使用 SELF JOINGROUP BY,您可以编写如下查询:

    SELECT t1.id, t1.value, (CASE WHEN t1.value = t2.value THEN 'true' ELSE 'false' END) AS 'MATCH'
    FROM example_table t1 INNER JOIN example_table t2
    ON t1.id = t2.id
    WHERE t1.source != t2.source
    GROUP BY t1.id, t1.value;
    

    输出:

    id | value | match
    1    55      true
    2    34      false
    2    36      false
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-29
      • 1970-01-01
      • 2016-05-03
      • 2017-04-20
      • 2022-01-25
      • 2021-12-05
      • 1970-01-01
      相关资源
      最近更新 更多