Количество столбцов, имеющих нулевое и ненулевое значение - PullRequest
0 голосов
/ 26 сентября 2018

Привет У меня есть запрос, в котором я хочу, чтобы сумма нулевых (0, '', NULL) и ненулевых значений в одной строке.

Пример: у меня есть таблица с 5 столбцами.Он содержит как минимум одну запись.В первой строке 2 столбца пустые, а 3 столбца имеют некоторое значение.Я хочу запрос, который даст мне результат, например non_null_count = 3, null_count = 2

Ответы [ 3 ]

0 голосов
/ 26 сентября 2018

Количество NOT NULL данных-

SELECT Count(*) 
FROM   employee 
WHERE  salary IS NOT NULL 
       AND emp_name IS NOT NULL 
       AND manager_id IS NOT NULL 

Количество NULL данных-

SELECT Count(*) 
FROM   employee 
WHERE  salary IS NULL 
       AND emp_name IS NULL 
       AND manager_id IS NULL 
0 голосов
/ 26 сентября 2018

В MySQL логические выражения можно рассматривать как числа, с «1» для true и «0» для false.

Итак, это делает то, что вы хотите:

select ((col1 is not null) + (col2 is not null) + (col3 is not null) +
        (col4 is not null) + (col5 is not null)
       ) as num_not_null,
       ((col1 is null) + (col2 is null) + (col3 is null) +
        (col4 is null) + (col5 is null)
       ) as num_null
from t;

Обратите внимание, что это интерпретирует «пробел» как NULL.Вы также можете легко использовать <> '' или аналогичную логику, если «пробел» означает что-то еще.

РЕДАКТИРОВАТЬ:

Для других значений вам необходимо расширить логику.Простой способ:

select ((col1 is not null and col1 not in ('0', '')) +
        (col2 is not null and col2 not in ('0', '')) +
        (col3 is not null and col3 not in ('0', '')) +
        (col4 is not null and col4 not in ('0', '')) +
        (col5 is not null and col5 not in ('0', '')) 
       ) as num_not_null,
       ((col1 is null or col1 in ('0', '')) + 
        (col2 is null or col2 in ('0', '')) + 
        (col3 is null or col3 in ('0', '')) + 
        (col4 is null or col4 in ('0', '')) + 
        (col5 is null or col5 in ('0', '')) 
       ) as num_null
from t;
0 голосов
/ 26 сентября 2018

Вы можете использовать это.

SELECT ( IF(col1 IS NOT NULL, 1, 0) 
         + IF(col2 IS NOT NULL, 1, 0) 
         + IF(col3 IS NOT NULL, 1, 0) +... ) AS total_not_null, 
       ( IF(col1 IS NULL, 1, 0) 
         + IF(col2 IS NULL, 1, 0) 
         + IF(col3 IS NULL, 1, 0) +... )     AS total_null 
FROM   mytable 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...