Как получить истинный и ложный счет, сравнивая две таблицы - PullRequest
0 голосов
/ 24 октября 2018

Ниже приведены две таблицы:

Таблица 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.

Я использую красное смещение amazon.

Требуемый вывод должен выглядеть следующим образом:

TRUE    FALSE     NULL
  1       2        1

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

вариант использования, когда

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
0 голосов
/ 24 октября 2018
  • Выполните Left join из Таблицы2 в Таблицу1, используя ID.
  • Используйте функции агрегирования, такие как Sum(), с условными функциями / операторами, такими как Ifnull(), IS NOT NULL.
  • Code - это ключевое слово в 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;
...