Mysql查询检查数字是否为x并计为1

时间:2012-07-02 08:20:17

标签: mysql

Mysql查询问题

如果为1,2或5,如何计为1

field1 = 1 field2 = 1 field3 = 5 field4 = 2 字段5 = 0; 字段6 = 6;

我需要检查这些字段中的任何一个是1,2还是5并将它们计为1并忽略其余字段。

SELECT field1 + field2 + field3 + field4 + field5 + field6; FROM表WHERE id = 1; //应该返回4(1 + 1 + 1 + 1 + 0 + 0)

可以这样做,还是我要用php做呢?

4 个答案:

答案 0 :(得分:2)

SELECT field1 IN (1,2,5) + field2 IN (1,2,5) + ...

然而,这有点表明设计不佳;也许如果你能提供数据背后语义含义的更多细节,我们可以提出更好的选择吗?

答案 1 :(得分:1)

这应该有效:

select count(field1) + count(field2) + count(field3) + count(field4) + count(field5) + count(field6) as total
from table
where 
    field1 in(1,2,5)
    or field2 in(1,2,5)
    or field3 in(1,2,5)
    or field4 in(1,2,5)
    or field5 in(1,2,5)
    or field6 in(1,2,5)

编辑:然而,eggyal非常重要。您能否分享更多有关您的目标的信息,以便找到更好的解决方案?

答案 2 :(得分:1)

另一种选择是使用IF语句,如下所示:

SELECT IF(field1 = 1 or field1 = 2 or field1 = 5, 1, 0)+IF(field2 = 1 or field2 = 2 or field2 = 5, 1, 0)+IF(field3 = 1 or field3 = 2 or field3 = 5, 1, 0)+IF(field4 = 1 or field4 = 2 or field4 = 5, 1, 0)+IF(field5 = 1 or field5 = 2 or field5 = 5, 1, 0)+IF(field6 = 1 or field6 = 2 or field6 = 5, 1, 0) FROM table

答案 3 :(得分:1)

您可以使用搜索的CASE语句,但正如@eggyal所建议的那样,您的架构中可能存在设计缺陷。修复可以很好地简化您的要求。

SELECT  CASE WHEN Field1 IN (1, 2, 5) THEN 1 ELSE 0 END
        + CASE WHEN Field2 IN (1, 2, 5) THEN 1 ELSE 0 END
        + CASE WHEN Field3 IN (1, 2, 5) THEN 1 ELSE 0 END
        + CASE WHEN Field4 IN (1, 2, 5) THEN 1 ELSE 0 END
        + CASE WHEN Field5 IN (1, 2, 5) THEN 1 ELSE 0 END
        + CASE WHEN Field6 IN (1, 2, 5) THEN 1 ELSE 0 END
FROM    Table