按列值分组的列值更新mysql排名

Posted

技术标签:

【中文标题】按列值分组的列值更新mysql排名【英文标题】:Update mysql rank by column value grouped by column value 【发布时间】:2016-04-16 00:24:13 【问题描述】:

从这些例子开始。

1 mysql rank by column value grouped by column value

2Multiple Ranks in one table

他们解释了如何计算按列值分组的排名。在我的情况下 ship

我需要更新“排名”列, 而不是 选择

| iduser | ship  | score | rank  |
+--------+-------+-------+-------+
|   25   |   1   |   7   |   0   |
|   25   |   3   |  21   |   0   |
|   25   |   4   |  30   |   0   |
|   12   |   9   |  23   |   0   |
|   25   |   9   |  18   |   0   |
|   21   |   9   |   5   |   0   |

必须更新:

| iduser | ship  | score | rank  |
+--------+-------+-------+-------+
|   25   |   1   |   7   |   1   |
|   25   |   3   |  21   |   1   |
|   25   |   4   |  30   |   1   |
|   12   |   9   |  23   |   1   |
|   25   |   9   |  18   |   2   |
|   21   |   9   |   5   |   3   |

这是选择查询

SELECT  iduser,
        ship,
        score,
        ( 
            CASE ship 
            WHEN @curShip 
            THEN @curRow := @curRow + 1 
            ELSE @curRow := 1 AND @curShip := ship END
        ) AS rank
FROM    ship_stats,
        (SELECT @curRow := 0, @curShip := '') r
ORDER BY ship DESC, score DESC;

【问题讨论】:

所以您正在寻找更新声明? tutorialspoint.com/mysql/mysql-update-query.htm 是的。我需要更新:) 为什么要有人为您编写代码。至少自己试一试。如果您遇到问题,请回来并提出具体问题。 请提供您尝试编写的代码示例。 我认为从标题中可以清楚地看到这一点。我做了选择。但我无法进行更新。该示例在我制作的架构中。并在选择查询中。 【参考方案1】:
SET @curship = 0,@curRow = 0;
UPDATE ship_stats 
SET rank := 
        (CASE ship 
            WHEN @curShip 
            THEN @curRow := @curRow + 1 
            ELSE @curRow := 1 AND @curShip := ship END
        )
ORDER BY ship DESC, score DESC;

sqlfiddle

【讨论】:

以上是关于按列值分组的列值更新mysql排名的主要内容,如果未能解决你的问题,请参考以下文章

ListView 按列值分组

ListView按列值分组

如何按列值的计数进行分组并对其进行排序?

如何在 Pandas 数据框中按列值分组

按列值的前导字符对数据行进行分组

如何按列值分组应该只出现在第一行