Условие в фильтре написали как (is_paying = 1 AND is_mobile = 1) OR (is_paying = 1 AND NOT (is_mobile = 1)). Какому более простому условию оно эквивалентно?
A
is_mobile = 1B
is_paying = 1 AND is_mobile = 1C
is_paying = 1 OR is_mobile = 1D
is_paying = 1Правильный ответ. Здесь
is_paying = 1 общий для обеих веток, а is_mobile = 1 OR NOT (is_mobile = 1) является always true.Разбор
Исходное выражение покрывает оба случая для is_mobile: когда флаг истинный и когда он ложный, но в обоих случаях требуется is_paying = 1. Поэтому объединение двух веток через OR не добавляет новых ограничений по is_mobile. Упрощение до is_paying = 1 делает фильтр короче и снижает риск логических ошибок при дальнейших правках.
Проверь себя · 1/3разбор после ответа
Флаг
is_active принимает только 0 или 1. Какое условие является always true и не отфильтрует ни одной строки?Ещё вопросы по теме «Булева логика и фильтры»
- Какому выражению со скобками эквивалентно условие `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`?
- В таблице пользователей есть флаги `has_email_optin` и `has_push_optin` (0 или 1). Нужно выбрать пользователей, у которых включён ровно один канал (email или push, но не оба). Какое условие корректно?
- Все вопросы по «Булева логика и фильтры» →