这个问题已经很老了。但是我想发布它,以防有人遇到相同的问题。
首先,描述的答案无法正确运行。例如,对于
id crew_id amount type1 4 1000 AUB2 4 1500 AUB5 5 1000 AUB6 6 3000 AUB8 6 3500 AUB9 4 5000 AUB
(我刚刚删除了类型为“ CA”的行),结果表将是
id crew_id amount rank type1 4 1000 1 AUB2 4 1500 2 AUB9 4 5000 3 AUB5 5 1000 4 AUB6 6 3000 5 AUB8 6 3500 6 AUB
因此,实际上它并没有同时使用crew_id和type,而只是使用type。
这是我解决此问题的方法(可能有比使用两个嵌套的“ CASE”更优雅的方法,但是您知道了):
SELECt id, amount, CASE crew_id WHEN @curCrewId THEN CASE type WHEN @curType THEN @curRow := @curRow + 1 ELSE @curRow := 1 END ELSE @curRow :=1 END AS rank, @curCrewId := crew_id AS crew_id, @curType := type AS typeFROM Table1 pJOIN (SELECT @curRow := 0, @curCrewId := 0, @curType := '') rORDER BY crew_id, type
主要思想仍然存在。我刚刚添加了一个变量@curCrewId。如果有人需要使用3个变量进行分组,则只需使用3个变量和3个嵌套的’CASE’。:)



