我有与这个问题中描述的非常相似的要求。
mysql中的用户按积分排名 https://stackoverflow.com/questions/34637943/rank-users-in-mysql-by-their-points
唯一的区别在于我的数据。上述问题的数据表中每个学生只有一行。但就我而言,表可能包含单个学生的多行,如下所示
- 学生1分80分
- 学生2分77.5
- 学生2分4.5
- 学生 3 分 77
- 学生 4 分 77
所以现在排名应该根据SUM
用户拥有的积分(总计)。所以在这种情况下结果会是。
- 学生2 82分排名第一
- 学生1 排名2 80分
- 学生3 排名第3 77分
- 学生4 排名第3 77分
用于数据的 SQL Fiddle http://sqlfiddle.com/#!9/95dff
我尝试了一些方法来解决上述问题,但无法得到结果。任何帮助,将不胜感激。
在我之前的答案中使用相同的查询,只需将学生表更改为子查询即可组合每个学生的所有记录
change [student er] for
(SELECT `id`, SUM(`points`) as `points`
FROM students
GROUP BY `id`) er
SQL DEMO http://sqlfiddle.com/#!9/95dff/31
select er.*,
(@rank := if(@points = points,
@rank,
if(@points := points,
@rank + 1,
@rank + 1
)
)
) as ranking
from (SELECT `id`, SUM(`points`) as `points`
FROM students
GROUP BY `id`) er cross join
(select @rank := 0, @points := -1) params
order by points desc;
OUTPUT
| id | points | ranking |
|----|--------|---------|
| 5 | 91 | 1 |
| 6 | 81 | 2 |
| 1 | 80 | 3 |
| 2 | 78 | 4 |
| 3 | 78 | 4 |
| 4 | 77 | 5 |
| 7 | 66 | 6 |
| 8 | 15 | 7 |
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)