Проверьте, существует ли только один ноль в каждой строке, между двумя столбцами MySql (версия 8.0.13) - PullRequest
0 голосов
/ 18 ноября 2018

У меня есть два столбца col1 и col2 под именем таблицы table. В идеале данные в таблице должны выглядеть следующим образом:

 col1 | col2
  A     null
  null   B
  null   A
  C      null

Данные будут иметь ошибку, если существует строка, в которой оба столбца имеют значение null, или если оба столбца имеют значение. Так, например, если есть строка, которая выглядит как

 col1| col2
  A     B

или

col1 | col2
 null   null

Я могу посчитать количество нулей в каждом столбце с помощью запроса, например select count(*) from table where col1 IS NULL select count(*) from table where col2 IS NULL

Однако, просто зная количество null с и сложив их, я не скажу, где на самом деле существуют null в таблице. Есть ли запрос, который я могу написать, чтобы проверить, существует ли только один нуль в каждой строке?

Ответы [ 2 ]

0 голосов
/ 18 ноября 2018

Конечно. Вы можете получить количество правильных строк, используя:

select sum( (col1 is null and col2 is not null) or
            (col1 is not null and col2 is null)
          ) as one_null_per_row
from t;

Или:

select count(*)
from t
where (col1 is null and col2 is not null) or
      (col1 is not null and col2 is null);

(Первая версия позволяет добавлять другие резюме.)

Вы можете получить строки с ошибками, используя:

select t.*
from t
where (col1 is null and col2 is null) or
      (col1 is not null and col2 is not null)
0 голосов
/ 18 ноября 2018

Чтобы найти количество строк с ошибкой, вы можете использовать условие AND, чтобы проверить, являются ли оба столбцами null одновременно или не равны нулю одновременно:

SELECT COUNT(*) AS rows_with_error
FROM your_table 
WHERE (col1 IS NULL AND col2 IS NULL) OR 
      (col1 IS NOT NULL AND col2 IS NOT NULL)
...