mysql查询,在一个查询中包含两个我需要的东西

ehxuflar  于 2021-06-19  发布在  Mysql
关注(0)|答案(1)|浏览(319)

我为一场比赛建立了一个现场得分系统。当分数输入mysql数据库时,它们是这样输入的。。。

ID    userid    sessionid    sprintid    pointvalue1    pointvalue2  pointvalue3
1      1          1             1             10            5             2
2      2          1             1             10            5             3
3      3          1             1             12            6             3
4      1          1             2             10            6             4
5      2          1             2             12            5             3
6      3          1             2              9            4             3

从上面可以看到,有1个会话、2个不同的sprint(迭代)和3个不同的用户。我想展示一个领导委员会。领导委员会将显示(通过迭代)、用户名(来自另一个表)、sprint、点值1、点值2、点值3、该会话中所有迭代的累计点值1之和。所以在迭代1中,点值1和累积点值1的和是一样的。但是,在迭代2中,我应该看到一个点值1的和,对于用户1为20,对于用户2为22,对于用户3为21,顺序正确(降序)。我尝试了一个使用select sum的子查询,但是没有完全正确,我尝试了一个sum(if()),它看起来是正确的,但是不是。我想我需要一些指引去哪个方向。

uujelgoq

uujelgoq1#

我想这个查询会得到你想要的原始数据。您可能希望使用某种形式的对总分排序来调整查询,并且 WHERE 以及 LIMIT 条款,以满足您的确切需要。

SELECT s1.userid, 
       s1.sessionid,
       s1.sprintid,
       s1.pointvalue1,
       s1.pointvalue2,
       s1.pointvalue3,
       SUM(s2.pointvalue1) AS sum_pointvalue1,
       SUM(s2.pointvalue2) AS sum_pointvalue2,
       SUM(s2.pointvalue3) AS sum_pointvalue3
FROM scores s1
JOIN (SELECT userid, 
             sessionid,
             sprintid,
             SUM(pointvalue1) AS pointvalue1,
             SUM(pointvalue2) AS pointvalue2,
             SUM(pointvalue3) AS pointvalue3
      FROM scores
      GROUP BY userid, sessionid, sprintid
     ) s2
ON s2.userid = s1.userid AND s2.sessionid = s1.sessionid AND s2.sprintid <= s1.sprintid
GROUP BY userid, sessionid, sprintid
ORDER BY sprintid

输出:

userid  sessionid   sprintid    pointvalue1     pointvalue2     pointvalue3     sum_pointvalue1     sum_pointvalue2     sum_pointvalue3
2       1           1           10              5               3               10                  5                   3
3       1           1           12              6               3               12                  6                   3
1       1           1           10              5               2               10                  5                   2
2       1           2           12              5               3               22                  10                  6
3       1           2           9               4               3               21                  10                  6
1       1           2           10              6               4               20                  11                  6

sqlfiddle演示

相关问题