基于条件的MySQL SUM

诺帕尔

我需要帮助来制定查询以基于用户操作来计算点。有一个用户表,其中存储用户信息,每个用户都属于一个特定的类别(用户类别)。每个类别都有不同的级别(例如,level1,level2等。),每个级别都有一组要完成的任务(Task1,Task2 ...)。每个任务可以执行多次但是,积分是根据最大限制字段计算的

任务1-10分(最多2分-意味着用户可以执行此任务N次,但对于点数计算仅计两次)

任务2-5分(最多1分)

例如,假设User1执行5次Task1,但是对于点数计算Task1仅计2次,因此总点数为20。这对于所有任务都是相似的。

在完成每个任务时,用户获得N点并升级到下一个级别。请在下面的表结构中查找并查询:

使用者

uid,uname,uc_id(引用用户类别),ul_id(引用用户级别并指示当前用户级别)

user_category

uc_id ....

user_level

ul_id,uc_id(参考用户类别)...

level_tasks

lt_id,ul_id(参考用户级别),lt_point,lt_max

user_tasks

ut_id,lt_id(参考级别任务),uid(参考用户)

以下是我到目前为止尝试过的查询:

SELECT uid, SUM(LT.lt_point/LT.lt_max) as TotalLevelPoints FROM users AS U INNER JOIN user_tasks AS UT ON UT.ut_user_id = U.id INNER JOIN level_tasks AS LT ON LT.lt_id = UT.lt_id INNER JOIN user_level AS UL ON UL.ul_id = LT.ul_id INNER JOIN user_category AS UC ON UC.uc_id = UL.uc_id WHERE UT.ut_status = 1 AND U.uid = 1 AND UL.ul_id = 1 GROUP BY U.uid

这给出了所有总和,而没有考虑最大限制,我应该怎么写,以便总和也可以在该列上计算。希望我的问题很清楚..任何帮助将不胜感激。

Used_By_Already

我相信您将需要分两步执行此操作。首先求和,然后与每种任务类型允许的最大值进行比较。确定后,将每个用户的结果相加。例如

SELECT
      u.uid
    , SUM(user_task_points) AS user_task_points
FROM users AS u
INNER JOIN (
      SELECT
            ut.UT_user_id
          , lt_id
          , lt.LT_point
          , lt.LT_max_times
          , CASE WHEN SUM(lt.LT_point) > (lt.LT_point * lt.LT_max_times) THEN (lt.LT_point * lt.LT_max_times) 
                 ELSE SUM(lt.LT_point)
            END AS user_task_points
      FROM user_tasks AS ut
      INNER JOIN level_tasks AS lt ON ut.UT_rule_id = lt.LT_id
      INNER JOIN  user_level AS UL ON UL.ul_id = LT.ul_id
      WHERE ut.UT_status = 1
          AND ut.UT_user_id = 1
          AND ul.ul_id = 1
      GROUP BY
            ut.UT_user_id
          , lt_id
          , lt.LT_point
          , lt.LT_max_times
      ) AS p ON u.id = p.UT_user_id
GROUP BY
      u.uid
;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章