有没有办法对 MYSQL 中的 TINYINT(1) 列进行 AND 运算?
Is there a way to make an AND operation over a column of TINYINT(1) in MYSQL?
我得到以下 table 并且我需要 return 1 如果所有行都有 disponibilidad = 1
以下 QUERY 工作得很好,但我一直在寻找一种更有效的方法。
查询:
SELECT IF(AVG(disponibilidad) < 1, 0, 1) AS newResult
FROM pasteleria.compone
RIGHT JOIN pasteleria.ingredientes
ON pasteleria.compone.id_ingrediente = pasteleria.ingredientes.id_ingrediente
WHERE id_componente = 1;
结果:
如我所见,使用 'AND' 效率会高得多,因为它不必执行 AVG()。
怎么样
SELECT IF(COUNT(*)>0,0,1) AS newResult
FROM pasteleria.compone
RIGHT JOIN pasteleria.ingredientes
ON pasteleria.compone.id_ingrediente = pasteleria.ingredientes.id_ingrediente
WHERE id_componente = 1
AND disponibilidad <> 1
所以如果有任何行的disponibilidad是不是 1,你输出0,否则如果它是零(所以所有的disponibilidad值都是1)你输出1?
MySql 不支持像 Postgresql 的 bool_and
这样的布尔 AND 聚合函数。
为什么不简单 MIN()
:
SELECT MIN(disponibilidad) AS newResult
FROM pasteleria.compone
RIGHT JOIN pasteleria.ingredientes
ON pasteleria.compone.id_ingrediente = pasteleria.ingredientes.id_ingrediente
WHERE id_componente = 1;
只有当该列的所有值都为 1(前提是该列不可为空)时,才会 return 1,如果至少有一行为 0,则为 0。
我得到以下 table 并且我需要 return 1 如果所有行都有 disponibilidad = 1
以下 QUERY 工作得很好,但我一直在寻找一种更有效的方法。
查询:
SELECT IF(AVG(disponibilidad) < 1, 0, 1) AS newResult
FROM pasteleria.compone
RIGHT JOIN pasteleria.ingredientes
ON pasteleria.compone.id_ingrediente = pasteleria.ingredientes.id_ingrediente
WHERE id_componente = 1;
结果:
如我所见,使用 'AND' 效率会高得多,因为它不必执行 AVG()。
怎么样
SELECT IF(COUNT(*)>0,0,1) AS newResult
FROM pasteleria.compone
RIGHT JOIN pasteleria.ingredientes
ON pasteleria.compone.id_ingrediente = pasteleria.ingredientes.id_ingrediente
WHERE id_componente = 1
AND disponibilidad <> 1
所以如果有任何行的disponibilidad是不是 1,你输出0,否则如果它是零(所以所有的disponibilidad值都是1)你输出1?
MySql 不支持像 Postgresql 的 bool_and
这样的布尔 AND 聚合函数。
为什么不简单 MIN()
:
SELECT MIN(disponibilidad) AS newResult
FROM pasteleria.compone
RIGHT JOIN pasteleria.ingredientes
ON pasteleria.compone.id_ingrediente = pasteleria.ingredientes.id_ingrediente
WHERE id_componente = 1;
只有当该列的所有值都为 1(前提是该列不可为空)时,才会 return 1,如果至少有一行为 0,则为 0。