поиск ненулевого условия в нескольких столбцах с запросом postgresql

Я хочу подсчитать, сколько документов не имеют даты в поле1, поле2, поле3 и поле4. Я создал запрос, как показано ниже, но на самом деле он выглядит не очень хорошо.

select 
   count(doc)
where true
   and field1 is not null
   and field2 is not null
   and field3 is not null
   and field4 is not null

Как применить один фильтр для нескольких столбцов?

Заранее спасибо.


person nomnom3214    schedule 04.06.2021    source источник


Ответы (1)


В вашем текущем запросе нет ничего плохого, и, вероятно, я бы использовал его здесь. Однако здесь вы можете использовать трюк COALESCE:

SELECT COUNT(*)
FROM yourTable
WHERE COALESCE(field1, field2, field3, field4) IS NOT NULL;

Это работает, потому что для любой записи, имеющей хотя бы одно из четырех полей, назначенных дате, отличной от NULL, проверка IS NOT NULL не пройдет. Только записи, для которых все четыре поля равны NULL, будут совпадать.

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

SELECT COUNT(*)
FROM yourTable
WHERE COALESCE(field1, field2, field3, field4) IS NULL;
person Tim Biegeleisen    schedule 04.06.2021