比较同一表中的2列

Jer*_*con 3 mysql

我需要比较表中的2列并给出3件事:

  • 已检查的行数(已检查的总行数)
  • 匹配的(两列匹配的行)
  • 行数不同(两列不同的行)

我已经能够通过使用自身的联接获得仅行匹配的记录,但是我不确定如何一次获得所有其他记录。同时获取所有信息的重要性是因为这是一个非常活跃的表,并且数据的更改频率很高。

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

Boh*_*ian 5

select
    count(*) as rows_checked,
    sum(col = col2) as rows_matching,
    sum(col != col2) as rows_different
from table
Run Code Online (Sandbox Code Playgroud)

请注意的优雅用法sum(condition)
这是可行true1,因为在mysql中,is 和falseis 0。将这些总和计算条件为的次数true。它比优雅得多case when condition then 1 else 0 end,后者相当于SQL的编码if (condition) return true else return false;而不是简单的return condition;