Агрегатнілише PostgreSQL

BOOL_AND

Повертає true, якщо умова правдива для всіх рядків.

Синтаксис

BOOL_AND(<умова>)
EVERY(<умова>)

Агрегатна функція «чи всі?». Разом із GROUP BY відповідає на це для кожної групи: чи в усіх у відділі є бонус. NULL пропускає. EVERY — те саме, лише назва зі стандарту SQL. Дзеркальна функція — BOOL_OR: «чи є хоч один?».

Дані для прикладів

employees

namedepartmentsalarybonusphone
Emmabackend1200300+44 7700 900123
Liambackend1000NULLNULL
Oliviafrontend1350150+44 7700 900456
Noahfrontend950NULL+44 7700 900789
Sophiadesign1200200NULL

Ці таблиці вже створено в пісочниці — приклади нижче працюють із ними. Хочеш повторити у своїй базі — скопіюй SQL.

Чи всі заробляють понад 900 і понад 1000
SELECT BOOL_AND(salary > 900) AS everyone_above_900,
BOOL_AND(salary > 1000) AS everyone_above_1000
FROM employees;
everyone_above_900everyone_above_1000
truefalse
Чи в усіх у відділі є бонус
SELECT department,
BOOL_AND(bonus IS NOT NULL) AS all_have_bonus
FROM employees
GROUP BY department
ORDER BY department;
departmentall_have_bonus
backendfalse
designtrue
frontendfalse
Відділи, де бонус є в усіх
SELECT department
FROM employees
GROUP BY department
HAVING BOOL_AND(bonus IS NOT NULL);
department
design

Зверни увагу

NULL пропускаються: BOOL_AND(bonus > 100) не врахує тих, у кого бонусу нема, і дасть true. Хочеш рахувати відсутній бонус як «ні» — пиши BOOL_AND(bonus IS NOT NULL AND bonus > 100).

Якщо рядків нема, результат — NULL, а не true чи false.

Схожі функції