MYSQL查询包含1个查询中我需要的两件事
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MYSQL查询包含1个查询中我需要的两件事相关的知识,希望对你有一定的参考价值。
我为游戏建立了一个实时评分系统。当分数输入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个不同的用户。我想展示一个排行榜。排行榜将显示(通过迭代),用户名(来自另一个表),冲刺,点值1,点值2,点值3,该会话中所有迭代累积的点值1的总和。因此,在迭代1中,点值1和点值1累加的总和将是相同的。但是,在迭代2中,我应该看到用户1的点值1的总和为20,用户2的点值为22,用户3的点值为21,按正确的顺序(降序)。我尝试使用选择总和的子查询,但是不能完全正确,我尝试了一个SUM(IF()),看起来它是正确的,但事实并非如此。我想我需要一些指导方向。
答案
我认为这个查询会为您提供所需的原始数据。您可能希望使用某些形式的总点数排序调整查询,并可能需要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
以上是关于MYSQL查询包含1个查询中我需要的两件事的主要内容,如果未能解决你的问题,请参考以下文章