php - MYSQL 查询包含我在 1 个查询中需要的 2 个东西
问题描述
我已经为游戏建立了一个实时计分系统。当分数输入 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
推荐阅读
- python - 试图移动一个对象并使用 Tkinter 作为 GUI,但是当有多个类的实例时它不起作用
- c# - 如何使用命令行调试器 .NET
- powershell - 使用格式获取创建日期
- javascript - Electron 应用程序和基于 Web 的 Angular 应用程序
- r - R if/else 在函数中
- windows-10 - Windows 10 上奇怪的 UDP 问题
- ruby-on-rails - Rails - 测试作用域destroy_all忽略作用域
- wordpress - WordPress REST API - 超过 10 个帖子
- java - 使用不同于默认的事务隔离创建休眠事务
- react-native - undefined 不是函数(评估 '_reactNativeNavigation2.default.startTabBasedApp') startTabs StartMainTabs.js