В таблице пользователей есть флаги 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)B
has_email_optin = 1 AND has_push_optin = 1C
has_email_optin = 1 OR has_push_optin = 1D
NOT (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. Какой фильтр соответствует оба?Ещё вопросы по теме «Булева логика и фильтры»
- Какому выражению со скобками эквивалентно условие `is_new = 1 OR is_paying = 1 AND has_coupon = 1`, если `AND` выполняется раньше `OR`?
- В фильтре написали `country = 'RU' AND device = 'ios' OR device = 'android'`. Какой набор строк реально пройдёт фильтр при стандартном приоритете, где `AND` сильнее `OR`?
- Какое условие эквивалентно `NOT (is_paying = 1 AND has_subscription = 1)` по правилу `De Morgan`?
- Вы хотите выбрать строки, которые не относятся к `country = 'RU' OR country = 'KZ'`. Какое выражение соответствует `NOT (country = 'RU' OR country = 'KZ')` по правилу `De Morgan`?
- В сегмент нужно включить пользователей, у которых активен хотя бы один из флагов: `is_student = 1` или `has_coupon = 1`. Какое условие соответствует формулировке «хотя бы один»?
- Все вопросы по «Булева логика и фильтры» →