繁体   English   中英

计算* one * row / record中不同列中值的出现次数

[英]Count number of occurences of a value in different columns in *one* row/record

当我设置表格时,我可能会以错误的方式执行此操作? 我正在使用mysql和php。 googleing的负载仅显示如何计算值在多行中出现的次数,我想检查许多不同列中的值,但是在同一记录中。 (我认为这样: 计算每行数据的列数可能大致相同,但是我不明白。)

我有一个目标表,我希望每天都能实现目标。 因此,我希望每天都标记:“成功”或“失败”。 插入工作很棒。 我怎么想找到一种方法来计算“今天”的成功次数和失败次数,以显示正确的笑脸,根据失败次数和成功次数,这些笑脸会令人鼓舞或悲伤。

例如:

ID  date          drinkMoreWater    goToBedEarlier    callADearFriend
1   2012 jan 15   fail              fail              fail
1   2012 jan 16   success           _(still empty)    success

因此,如果今天是1月15日,笑脸将非常悲伤。 如果今天是1月16日那个笑脸真的会非常狡猾的星星(至少我没有进球2;))

您的表格实际上应采用不同的结构,以使您的生活更轻松:

Goals:
ID     Goal
1      drinkMoreWater
2      goToBedEarly
3      callADearFriend

Status:
ID     Status
1      Success
2      Fail

Tracking:
ID     Date      Goal_ID     Status_ID
1      1/1/2012  1           1
1      1/1/2012  3           2
1      1/2/2012  2           1
1      1/2/2012  4           1

现在您可以轻松添加目标和状态(例如“正在处理它”),并且您的表结构不必更改以适应您的更改,您的查询也变得更加简单。

如果你想在SQL中这样做,你可以使用类似三元的结构,如下所示:

SELECT *, 
       (CASE drinkMoreWater WHEN 'success' THEN 1 ELSE 0 END)
     + (CASE goToBedEarlier WHEN 'success' THEN 1 ELSE 0 END)
     + (CASE callADearFriend WHEN 'success' THEN 1 ELSE 0 END)
     AS numberOfSuccesses 
FROM yourTable

你可以这样做:

Select case when sub.smilies = 0 then "very very sad" else 
             case when sub.smilies = 1 then "sad" else "hubby" end
        end as "Number of Smilies"
from
(
     Select case when t.drinkMoreWater  = "fail" then 0 else 1 end +
            case when t.goToBedEarlier  = "fail" then 0 else 1 end +
            case when t.callADearFriend = "fail" then 0 else 1 end as smilies 
     from yourTableName t 
     where date = @date
) sub

您将需要处理空字符串,并解决这些case语句。 此解决方案适用于您当前的设计,但您最好考虑@BassamMehanni的答案所建议的重新设计

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM