Вчера полчаса смотрел на свой, написанный с месяц назад, запрос, не в состоянии понять, почему он работает. Ступор наступал при взгляде на конструкцию COUNT(имя_столбца OR NULL). А где-то в глубинах сознания гулко звучало: «Любая операция с NULL, кроме операции сравнения, в результате даёт NULL, независимо от значения прочих операндов».
Выясняя, откуда взялась эта убеждённость, вышел на
статью из
Википедии. Вот что значит в полуобморочном состоянии забивать свою голову новыми знаниями…
Так вот: неправда это. В PostgreSQL (да и в MySQL) TRUE OR NULL = TRUE, а FALSE AND NULL = FALSE! И конструкция мне нужна была, чтобы посчитать значения TRUE, а все FALSE обратить в NULL, кои COUNT'ом не считаются.
Вопросы, а почему нельзя было TRUE'шность поля вынести в условие, не принимаются. Нельзя. Строки с FALSE в этом поле в этом запросе тоже нужны, для других целей.