这个问题很老了但是我想发布,以防有人会遇到同样的问题。
首先,描述的答案不正确。例如,for
id crew_id amount type
1 4 1000 AUB
2 4 1500 AUB
5 5 1000 AUB
6 6 3000 AUB
8 6 3500 AUB
9 4 5000 AUB
(我刚刚删除了类型为’CA’的行),结果表将是
id crew_id amount rank type
1 4 1000 1 AUB
2 4 1500 2 AUB
9 4 5000 3 AUB
5 5 1000 4 AUB
6 6 3000 5 AUB
8 6 3500 6 AUB
所以实际上它不使用crew_id和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 type
FROM Table1 p
JOIN (SELECT @curRow := 0, @curCrewId := 0, @curType := '') r
ORDER BY crew_id, type
主要想法依然存在。我刚刚添加了一个变量@curCrewId。如果有人需要使用3个变量进行分组,那么只需使用3个变量和3个嵌套的“CASE”。 🙂