【问题标题】:Mysql query check if number is x and count as 1Mysql查询检查数字是否为x并计为1
【发布时间】:2012-07-02 15:39:31
【问题描述】:

Mysql查询题

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

字段1 = 1 字段2= 1 字段 3= 5 字段4= 2 字段5=0; 字段6=6;

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

选择字段1+字段2+字段3+字段4+字段5+字段6; FROM 表 WHERE id=1; // 应该返回 4 (1+1+1+1+0+0)

这可以做到吗,还是我必须用 php 来做?

【问题讨论】:

    标签: mysql


    【解决方案1】:
    SELECT field1 IN (1,2,5) + field2 IN (1,2,5) + ...
    

    但是,这在某种程度上表明设计不佳;或许如果您能提供数据背后语义含义的更多细节,我们可以提出更好的替代方案?

    【讨论】:

      【解决方案2】:

      您可以使用搜索过的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
      

      【讨论】:

        【解决方案3】:

        这应该可行:

        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 提出了一个很好的观点。您能否分享更多关于您的目标的信息,以便找到更好的解决方案?

        【讨论】:

          【解决方案4】:

          另一种选择是使用 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
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2023-03-26
            • 1970-01-01
            • 2021-08-14
            • 2018-07-03
            • 2019-01-03
            • 2010-11-13
            • 2019-07-20
            • 1970-01-01
            相关资源
            最近更新 更多