在mysql查询中进行计算

时间:2016-01-21 13:31:56

标签: mysql

我有一个user_answer表包含这样的值。基本上,我正在存储用户响应。

userid   category_id    question_id  difficulty_level response    updated_date

1395           1             1              5            0        2014-08-29 00:29:48
1395           1             2              1            1        2014-08-30 11:29:34
1395           1             3              2            0        2014-08-25 08:12:28
1421           1             2              1            1        2014-08-25 06:32:45
1421           1             3              2            1        2014-08-28 01:25:24

响应

"0" is wrongly answered

"1" is answered correct

难度等级我们拥有的是1-5。每个问题都有不同的难度级别(1,2,3,4,5)。

我想用category_id计算每个用户的积分。这是计算点数的方法(在PHP中)。

$cur_points = 0;
if(response == 1){
   $cur_points = $cur_points - 1;
}
else if(response == 0){
    if(difficulty_level== 1){
        $cur_points = $cur_points + 5;
    }
    else if(difficulty_level== 2){
        $cur_points = $cur_points + 4;
    }
    else if(difficulty_level== 3){
        $cur_points = $cur_points + 3;
    }
    else if(difficulty_level== 4){
        $cur_points = $cur_points + 2;
    }
   else if(difficulty_level== 5){
        $cur_points = $cur_points + 1;
    }
}

现在这个计算我必须做MYSQL查询本身,结果应该是这样的:

 userid   category_id   recently_answered_date           points

 1395           1       2014-08-30 11:29:34                 4
 1421           1       2014-08-28 01:25:24                 3

recent_answered_date将是用户在该类别中回答问题的最近日期。

有可能吗?感谢。

1 个答案:

答案 0 :(得分:2)

使用条件SUM添加所需的值。

 SELECT user_id, 
        category_id,
        max(updated_date) as recently_answered_date,
        SUM( CASE response
                   WHEN 0 THEN -1
                   ELSE CASE difficulty_level
                             WHEN 1 THEN 5
                             WHEN 2 THEN 4
                             WHEN 3 THEN 3
                             WHEN 4 THEN 2
                             ELSE 1
                        END
             END) as POINTS
   FROM user_answer
   GROUP BY user_id, category_id

注意: 仍然不清楚为什么正确答案'1'会删除您的查询中的点,所以我猜这是一个拼写错误,无论是查询还是wrong/correct定义。