is_student = 1 или has_coupon = 1. Какое условие соответствует формулировке «хотя бы один»?AND, OR, NOT, законы де Моргана, приоритет операторов — булева логика лежит в основе фильтрации данных в SQL и Python. На собеседовании дают сложное условие с вложенными AND/OR и просят определить, какие строки пройдут фильтр. Ошибки в логических выражениях — одна из самых частых причин неправильных результатов.
Всего в этом разделе 20 вопросов. Каждый — с правильным ответом и кратким разбором теории. Разбито на 4 части по 5 вопросов.
Флаг не может одновременно равняться 1 и 0, поэтому условие `is_paying = 1 AND is_paying = 0` никогда не выполнится — это противоречие. Такие условия иногда появляются при неверной склейке фильтров через `AND` или при попытке одновременно потребовать два взаимоисключающих сегмента. Распознавание тождественно ложных условий помогает понять, почему запрос возвращает пустой результат, и быстро найти ошибку логики. Противоположный случай — `is_paying = 1 OR is_paying = 0` — наоборот, тождественно истинно для любой определённой строки.
Подробный разбор →Условие `A OR B` истинно, если истинно A, или истинно B, или истинны оба. Это ровно соответствует «хотя бы один признак». `AND` отберёт только тех, у кого активны оба флага. `NOT (A OR B)` отберёт пользователей, у которых ни одного флага нет. Длинная конструкция с XOR-логикой соответствует «ровно один из флагов», а не «хотя бы один».
Подробный разбор →`NOT` инвертирует истинность выражения, а повторная инверсия возвращает исходный смысл. В фильтрах лишние `NOT` ухудшают читаемость и увеличивают шанс перепутать логику при правках. Поэтому `NOT (NOT (is_test_user = 1))` безопасно упрощается до `is_test_user = 1`.
Подробный разбор →Условие `A AND B` истинно только когда истинны и A, и B одновременно. Это отличается от «хотя бы одно», где достаточно одного условия и используется `OR`, и от «ровно одно», где оба сразу быть истинными не должны. Вариант с `NOT (... AND ...)`, наоборот, исключает пользователей с обоими признаками. В фильтрах сегментов путаница между `AND` и `OR` — одна из самых частых причин неверной аналитики.
Подробный разбор →Чтобы пользователь не был ни в одном из сегментов, оба условия участия должны быть ложными одновременно, значит нужен `AND`. Ошибка — использовать `OR`: тогда достаточно, чтобы один флаг был ложным, и пользователь пройдёт, даже если другой флаг истинный. По законам де Моргана это также эквивалентно `NOT (in_ab_test = 1 OR in_holdout = 1)`, но не `NOT (... AND ...)` — последнее даёт пользователей, которые не в обоих сегментах одновременно.
Подробный разбор →В приложении — таймер, прогресс, стрики и 1700+ вопросов по всем темам.
Открыть Карьерник в Telegram