1

我得到了下表,如果所有行都有 disponibilidad = 1,我需要返回 1

示例表

以下查询工作得很好,但我正在寻找一种更有效的方法。

询问:

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()。

4

2 回答 2

1

MySql 不支持像 Postgresql 的布尔 AND 聚合函数bool_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(假设该列不可为空)时返回 1,如果至少有一行为 0,则返回 0。

于 2021-12-21T19:15:25.233 回答
0

像这样的东西怎么样

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?

于 2021-12-21T19:08:21.657 回答