我需要比较表中的 2 列并给出 3 项内容:

  • 检查的行数 (检查的总行数)
  • 匹配 的行数(2 列匹配的行数)
  • 不同的行数 (其中 2 列不同的行)

  • 我已经能够使用连接本身获得匹配的行,但我不确定如何同时获得其他行。同时获取所有信息的重要性是因为这是一个非常活跃的表,数据变化非常频繁。

    我无法发布表架构,因为其中有很多与此问题无关的数据。有问题的列都是 int(11) unsigned NOT NULL DEFAULT '0' 。为此,我将它们称为 maskmask_alt

    最佳答案

    select
        count(*) as rows_checked,
        sum(col = col2) as rows_matching,
        sum(col != col2) as rows_different
    from table
    

    请注意 sum(condition) 的优雅使用。
    这是有效的,因为在 mysql true1 并且 false0 。将这些计数相加就是条件为 true 的次数。它比 case when condition then 1 else 0 end 优雅得多,它是编码 if (condition) return true else return false; 而不是简单的 return condition; 的 SQL 等价物。

    关于mysql - 比较同一表中的 2 列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8720510/

    10-13 04:52