MySQL给每个组一个排名

Posted

技术标签:

【中文标题】MySQL给每个组一个排名【英文标题】:MySQL give a rank to each group 【发布时间】:2018-01-02 09:01:55 【问题描述】:

我要做的是用相同的id 更新所有行列,数量增加,当没有更多的id 时,我继续下一个。

表格:

id  column
1   0
1   0
2   0
2   0
3   0
3   0

我试过了:

SELECT @i:=0;
UPDATE table SET column = @i:=@i+1

这样我更新了列,但列值类似于 1 2 3 4 5 6 和 每次当行的id 发生更改时,我都必须将@i 重置回0。 或:

表格:

id  column
1   1
1   2
2   1
2   2
3   1
3   2

我想这应该由一个循环来完成。但是拿不到。另外,当我尝试在 mysql (phpMyAdmin) 中创建一个循环时,它给了我一个错误。我读到的是我不能直接在 PHPMyAdmin 中创建循环或者我误解了它?

【问题讨论】:

【参考方案1】:
UPDATE table ,(SELECT @curRow := 0, @curCol := '') r SET column=
    ( CASE id WHEN @curCol  THEN @curRow := @curRow + 1  ELSE @curRow := 1 AND @curCol := id END)

Test

【讨论】:

非常感谢!现在一切都好:) 为什么r 在那里?是关于recursive 还是什么?对于这个可悲的问题,我很抱歉。 @TomaTomov 每个子查询都需要一个别名,r 可以是任何东西。

以上是关于MySQL给每个组一个排名的主要内容,如果未能解决你的问题,请参考以下文章

对表中的每一行进行排名,并将行分组为重复项,而不重置每个组的排名

MySQL跨多列排名

如何在mysql中获取这个特定的用户排名查询?

MySQL select 语句 - 如何计算当前排名

mysql查询排名

mysql查询排名