首页 > 解决方案 > MySQL 通过乘以其他行中的值返回 1 或 0

问题描述

我有一个名为应用程序的表。此表有一个名为 status 的列。一个用户可以有许多应用程序。我想编写一个查询来根据整体状态检索用户应用程序的状态。如果应用程序的每个状态都是 1,则查询需要返回 1,否则返回 0。(逻辑上和每个状态)。

我正在使用 BIT_AND 来执行此操作。如果有两个或多个要比较的数据,此函数会显示正确的结果。如果只有一条记录,则值为 1。

For example
0 * 0 => 1 (status) **This is error. Correct should be 0**
0 => 1 (status) **This is error. Correct should be 0**
1 * 0 = 0 (status)

我的表如下图 在此处输入图像描述

我正在使用这个查询。

SELECT bit_and(application.status)
from applicant_applications application
where application.applicant_id = 1;

这个问题可以很容易地在程序中解决。但我正在查询中寻找一些东西。提前致谢

标签: mysql

解决方案


您可以使用几个聚合函数来确定查询结果。就像是

  SELECT IF(SUM(aa.status) = COUNT(DISTINCT aa.id), 1, 0) as `status`
    FROM applicant_applications aa
   WHERE aa.applicant_id = 1
GROUP BY aa.applicant_id;

足以检查所有应用程序的状态是否为 1。

要测试,请查看这个小提琴:

http://sqlfiddle.com/#!9/26a9bd/1


推荐阅读