如何比较两个表获得真假计数
Posted
技术标签:
【中文标题】如何比较两个表获得真假计数【英文标题】:How to get True and False count comparing two tables 【发布时间】:2018-10-24 09:36:30 【问题描述】:我在下面提到了两个表:
表1:
ID Code
URT-112 AAB
URT-113 12F
URT-114 234
URT-115 [Null]
表2:
Merchant_ID Flag
URT-112 CDE
URT-113 11F
URT-114 234
URT-115 DEW
通过利用上面的表格,并认为Table2
是准确的,我想知道Table1
中有多少条目是错误的。
我正在使用亚马逊红移。
所需的输出应如下所示:
TRUE FALSE NULL
1 2 1
【问题讨论】:
嗨,发布的答案有效吗? 【参考方案1】:用例当
SELECT
SUM(case when t2.Flag = t1.Code then 1 else 0 end) AS TRUE_CNT,
SUM(case when t1.Code is not null and t2.Flag <> t1.Code then 1 else 0 end) AS FALSE_CNT,
SUM(case when t1.Code IS NULL then 1 else 0 end) AS NULL_CNT
FROM Table2 AS t2
LEFT JOIN Table1 AS t1 ON t2.Merchant_ID = t1.ID
【讨论】:
【参考方案2】: 使用ID
从 Table2 到 Table1 执行 Left join
。
使用Sum()
等聚合函数,以及Ifnull()
、IS NOT NULL
等条件函数/运算符。
Code
是 keyword in mysql。您应该避免将其用作表名称,而应使用其他名称。如果您仍需要使用它,则必须在其周围使用反引号。
尝试以下方法 (DB Fiddle DEMO):
SELECT
SUM(IF(t1.`Code` IS NOT NULL, t2.Flag = t1.`Code`, 0)) AS `TRUE`,
SUM(IF(t1.`Code` IS NOT NULL, t2.Flag <> t1.`Code`, 0)) AS `FALSE`,
SUM(IF(t1.`Code` IS NULL, 1, 0)) AS `NULL`
FROM Table2 AS t2
LEFT JOIN Table1 AS t1 ON t1.ID = t2.Merchant_ID
缩短版 (DB Fiddle):
SELECT
SUM(t1.`Code` IS NOT NULL AND t2.Flag = t1.`Code`) AS `TRUE`,
SUM(t1.`Code` IS NOT NULL AND t2.Flag <> t1.`Code`) AS `FALSE`,
SUM(t1.`Code` IS NULL) AS `NULL`
FROM Table2 AS t2
LEFT JOIN Table1 AS t1 ON t1.ID = t2.Merchant_ID;
【讨论】:
以上是关于如何比较两个表获得真假计数的主要内容,如果未能解决你的问题,请参考以下文章