Исходя из этого ответа: Ранг по двум столбцам
У меня есть следующий пример:
CREATE TABLE tmpPoradi
(`player` int, `wins` int, `diff` int)
;
INSERT INTO tmpPoradi
(`player`, `wins`, `diff`)
VALUES
(1, 10, 12),
(2, 8, 2),
(3, 10, 10),
(4, 8, 1),
(5, 8, 7),
(6, 10, 14),
(8, 10, 10),
(7, 12, 3)
;
и желаемый результат должен быть:
+--------+------+------+------+
| player | wins | diff | rank |
+--------+------+------+------+
| 7 | 12 | 3 | 1 |
| 6 | 10 | 14 | 2 |
| 1 | 10 | 12 | 3 |
| 3 | 10 | 10 | 4 |
| 8 | 10 | 10 | 4 |
| 5 | 8 | 7 | 5 |
| 2 | 8 | 2 | 6 |
| 4 | 8 | 1 | 7 |
+--------+------+------+------+
Дело в том, что исходный ответ возвращает количество строк:
SELECT player, wins, diff,rank from
(
SELECT player, wins, diff, @winrank := @winrank + 1 AS rank
from tmpPoradi,(SELECT @winrank := 0) r
ORDER BY wins DESC,diff DESC
) rt
ORDER BY rank
возвращает:
+---------+-------+-------+-------+
| player | wins | diff | rank |
+---------+-------+-------+-------+
| 7 | 12 | 3 | 1 |
| 6 | 10 | 14 | 2 |
| 1 | 10 | 12 | 3 |
| 3 | 10 | 10 | 4 |
| 8 | 10 | 10 | 5 |
| 5 | 8 | 7 | 6 |
| 2 | 8 | 2 | 7 |
| 4 | 8 | 1 | 8 |
+---------+-------+-------+-------+
и моя попытка с условиями возвращает следующий результат: (не знаю почему)
SELECT player, wins, diff,rank from
(
SELECT player, wins, diff, @winrank := IF(wins = diff,@winrank,@winrank + 1) AS rank
from tmpPoradi,(SELECT @winrank := 0) r
ORDER BY wins DESC,diff DESC
) rt
ORDER BY rank
+---------+-------+-------+-------+
| player | wins | diff | rank |
+---------+-------+-------+-------+
| 7 | 12 | 3 | 1 |
| 6 | 10 | 14 | 2 |
| 3 | 10 | 10 | 3 |
| 8 | 10 | 10 | 3 |
| 1 | 10 | 12 | 3 |
| 5 | 8 | 7 | 4 |
| 2 | 8 | 2 | 5 |
| 4 | 8 | 1 | 6 |
+---------+-------+-------+-------+
поэтому вопрос в следующем:
Что я делаю не так и как можно добиться ранга по победам, а затем, если выигрыши связаны, подсчитать по дифференциалу, а затем, если diff связаны, ранг тот же?