如何在MySQL中为每个用户排序两行的总和

时间:2016-09-22 17:07:50

标签: php mysql

我有一个记分板表。

userID|userName|weekID|pickID|Score
--------------------------------------------
1     |Bob     | 1    | Den  | 10
1     |Bob     | 2    | Clev | 20
2     |Adam    | 1    | Car  | 12
2     |Adam    | 2    | Den  | 30

我想按所有周的总和对表格进行排序 我想要的结果就是这个。

 userID|userName|weekID|pickID|Score
--------------------------------------------
2     |Adam    | 1    | Car   | 12
2     |Adam    | 2    | Den   | 30
1     |Bob     | 1    | Den   | 10
1     |Bob     | 2    | Clev  | 20

Adams条目位于最前面,因为他在第1周和第2周的得分总和 是最高的。整个表需要以这种方式排序,所以当我在循环中吐出HTML时,行将按顺序排序。

2 个答案:

答案 0 :(得分:2)

您需要获得每个用户的总分,并按降序排序,并且还可以选择一个或多个其他列。我认为weekID是一个很好的辅助排序。

您可以JOIN根据userIDGROUP BY主要表格userIDweekID以及{{1 }} SUM ed table的JOIN列,以便能够正确Score

ORDER

如果您不需要返回的数据中的总数,则可以将SELECT s.userid, s.username, s.weekid, s.pickid, s.score, SUM(a.score) totalscore FROM scoreboard s INNER JOIN scoreboard a ON a.userid = s.userid GROUP BY s.userid, s.weekid ORDER BY totalscore DESC, s.weekid; 直接放在SUM子句中。

ORDER BY

我认为您的数据比此更加标准化,因此请相应调整。

我还想象你计划的运作时间不仅仅是一个赛季,所以你最终也可能需要对其进行过滤。

答案 1 :(得分:0)

" GROUP BY"是关键。以下应该有效:

SELECT userID, SUM(Score) as TotalScore
FROM teh_table
GROUP BY userID
ORDER BY TotalScore DESC;