我在stackOverflow这里找到了这个Q&A,当时我正在寻找一种分组排名数据的方法。解决方案是完美的,但是如何解释团队内部的联系呢?
到目前为止,我知道如何排名,但我不知道如何解释的联系分组。
+--------------------------------------------+
| id | code | score | rank |
+--------------------------------------------+
| 2477 | 312 | 64 | 1 |
| 1865 | 312 | 63 | 2 |
| 2511 | 312 | 62 | 3 |
| 2890 | 312 | 61 | 4 |
| 1335 | 312 | 61 | 5 |
| 1504 | 312 | 60 | 6 |
| 1385 | 312 | 60 | 7 |
| 1984 | 312 | 59 | 8 |
| 2477 | 212 | 64 | 1 |
| 1865 | 212 | 63 | 2 |
| 2511 | 212 | 62 | 3 |
| 2890 | 212 | 61 | 4 |
| 1335 | 212 | 61 | 5 |
| 1504 | 212 | 60 | 6 |
| 1385 | 212 | 60 | 7 |
| 1984 | 212 | 59 | 8 |我需要的是:
+--------------------------------------------+
| id | code | score | rank |
+--------------------------------------------+
| 2477 | 312 | 64 | 1 |
| 1865 | 312 | 63 | 2 |
| 2511 | 312 | 62 | 3 |
| 2890 | 312 | 61 | 4 |
| 1335 | 312 | 61 | 4 |
| 1504 | 312 | 60 | 5 |
| 1385 | 312 | 60 | 5 |
| 1984 | 312 | 59 | 6 |
| 2477 | 212 | 64 | 1 |
| 1865 | 212 | 63 | 2 |
| 2511 | 212 | 62 | 3 |
| 2890 | 212 | 61 | 4 |
| 1335 | 212 | 61 | 4 |
| 1504 | 212 | 60 | 5 |
| 1385 | 212 | 60 | 5 |
| 1984 | 212 | 59 | 6 |有办法得到上述结果吗?
发布于 2015-08-02 14:00:49
如果您需要在相同的代码组中为相同的分数分配相同的级别,则必须嵌套case语句。
select `id`, `code`, `score`,rank
from (
select `id`, `code`, `score`,
@r:= case when @g = `code`
then
case when @s <> `score` then @r + 1 else @r end
else 1
end rank,
@g:= `code`,
@s:= `score`
from table1
cross join(select @g:=null,@r:=0,@s:=null) t
order by `code` desc, `score` desc
) t1第一个case语句将检查相同的code组,如果找到相同的代码,那么在父case的then部分中将有另一个子case语句,它将检查分数是否与前一个不同,然后递增秩变量,否则将相同的等级分配给当前行。
https://stackoverflow.com/questions/31772522
复制相似问题