De agregaciónsolo PostgreSQL

BOOL_AND

Devuelve true si una condición se cumple en todas las filas.

Sintaxis

BOOL_AND(<condición>)
EVERY(<condición>)

La función de agregación del «¿todos?». Junto con GROUP BY lo responde para cada grupo: ¿tienen bonus todos los del departamento? Se salta NULL. EVERY es lo mismo con el nombre del estándar SQL. Su contraparte es BOOL_OR: «¿hay al menos uno?».

Datos para los ejemplos

employees

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

Estas tablas ya están creadas en el entorno de pruebas y los ejemplos de abajo las usan. ¿Quieres repetirlo en tu propia base de datos? Copia el SQL.

¿Ganan todos más de 900? ¿Y más de 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
¿Tienen bonus todos los del departamento?
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
Departamentos donde todos tienen bonus
SELECT department
FROM employees
GROUP BY department
HAVING BOOL_AND(bonus IS NOT NULL);
department
design

Ten en cuenta

Los NULL se saltan: BOOL_AND(bonus > 100) no tiene en cuenta a quienes no tienen bonus y da true. Si quieres que un bonus ausente cuente como «no», escribe BOOL_AND(bonus IS NOT NULL AND bonus > 100).

Si no hay filas, el resultado es NULL, no true ni false.

Funciones relacionadas