В таблице пользователей есть флаги has_email_optin и has_push_optin (0 или 1). Нужно выбрать пользователей, у которых включён ровно один канал (email или push, но не оба). Какое условие корректно?

A(has_email_optin = 1 AND NOT (has_push_optin = 1)) OR (NOT (has_email_optin = 1) AND has_push_optin = 1)
Bhas_email_optin = 1 AND has_push_optin = 1
Chas_email_optin = 1 OR has_push_optin = 1
DNOT (has_email_optin = 1 AND has_push_optin = 1)
Правильный ответ. «Ровно один» означает, что истинно одно условие, а второе ложно, поэтому объединяем два взаимно исключающих случая через OR.

Разбор

Если включён только email, выполняется has_email_optin = 1 AND NOT (has_push_optin = 1). Если включён только push, выполняется NOT (has_email_optin = 1) AND has_push_optin = 1. Объединяя эти два случая через OR, вы получаете ровно один истинный флаг. Условие NOT (A AND B) недостаточно, потому что оно пропускает также случай, когда не выполнено ни одно.

Проверь себя · 1/3разбор после ответа
В сегмент «платящие и активные» должны попасть пользователи, у которых выполнены оба условия: is_paying = 1 и is_active = 1. Какой фильтр соответствует оба?
Открыть Карьерник в Telegram

Ещё вопросы по теме «Булева логика и фильтры»