【问题标题】:How to count matching and non-matching records如何计算匹配和不匹配的记录
【发布时间】:2021-02-06 01:01:21
【问题描述】:

有哪些方法可以计算服务器中两个不同表(表ih)的匹配和不匹配记录。例如,i.id = h.id 计算匹配记录,i.id != h.id 计算不匹配记录。

逻辑在我的脑海中是有道理的,但我正在努力想出代码。我试过case 声明,但没有奏效。我只需要表h中匹配记录的总数和不匹配记录的总数。

【问题讨论】:

    标签: mysql sql join count databricks


    【解决方案1】:

    我不确定您到底需要什么,但也许类似的东西可以帮助您:

    SELECT
        COUNT(i.id) AS matching_count,
        COUNT(h.id) - COUNT(i.id) AS non_matching_count
    FROM h
        LEFT JOIN i ON h.id = i.id;
    

    上面的查询将告诉两个表中存在多少个id,以及表h中有多少个id在表i中不存在。

    或者逆逻辑:

    SELECT
        COUNT(h.id) AS matching_count,
        COUNT(i.id) - COUNT(h.id) AS non_matching_count
    FROM i
        LEFT JOIN h ON i.id = h.id;
    

    上面的查询将告诉两个表中存在多少个id,以及表i中有多少个id在表h中不存在。

    或者也许你想要这样的东西:

    SELECT
        COUNT(CASE WHEN h.id = i.id THEN 1 ELSE NULL END) AS matching_count,
        COUNT(CASE WHEN h.id != i.id THEN 1 ELSE NULL END) AS non_matching_count
    FROM h, i;
    

    上面的查询将告诉两个表中存在多少个id,以及笛卡尔积中存在多少个分歧。

    【讨论】:

      【解决方案2】:

      我认为您可能想先在id 级别进行总结:

      select id, max(in_i) as in_i, max(in_h) as in_h
      from ((select id, 1 as in_i, 0 as in_h
             from i
            ) union all
            (select id, 0, 1
             from h
            )
           ) ih
      group by id;
      

      然后总结一下:

      select count(*) as num_total_ids,
             sum(in_i) as num_i, sum(in_h) as num_h,
             sum(in_i * (1 - in_h)) as in_i_only,
             sum(in_h * (1 - in_i)) as in_h_only,
             sum(in_i * in_h) as num_both,
      from (select id, max(in_i) as in_i, max(in_h) as in_h
            from ((select id, 1 as in_i, 0 as in_h
                   from i
                  ) union all
                  (select id, 0, 1
                   from h
                  )
                 ) ih
            group by id
           ) i
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-08-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-04
        • 2011-11-27
        • 1970-01-01
        相关资源
        最近更新 更多