【问题标题】: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

【问题讨论】:

  • 嗨,发布的答案有效吗?

标签: mysql amazon-redshift


【解决方案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 等条件函数/运算符。
    • Codekeyword 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;
    

    【讨论】:

      猜你喜欢
      • 2013-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-06
      相关资源
      最近更新 更多