我需要比较表中的 2 列并给出 3 项内容:
我已经能够使用连接本身获得匹配的行,但我不确定如何同时获得其他行。同时获取所有信息的重要性是因为这是一个非常活跃的表,数据变化非常频繁。
我无法发布表架构,因为其中有很多与此问题无关的数据。有问题的列都是
int(11) unsigned NOT NULL DEFAULT '0'
。为此,我将它们称为 mask
和 mask_alt
。 最佳答案
select
count(*) as rows_checked,
sum(col = col2) as rows_matching,
sum(col != col2) as rows_different
from table
请注意
sum(condition)
的优雅使用。这是有效的,因为在 mysql
true
是 1
并且 false
是 0
。将这些计数相加就是条件为 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/