Пример таблицы
CREATE TABLE Table1 (`id` INT, `crew_id` INT, `amount` INT, `type` VARCHAR(3)); INSERT INTO Table1 (`id`, `crew_id`, `amount`, `type`) VALUES (1, 4, 1000, 'AUB'), (2, 4, 1500, 'AUB'), (3, 5, 8000, 'CA'), (4, 4, 1000, 'CA'), (5, 5, 1000, 'AUB'), (6, 6, 3000, 'AUB'), (7, 4, 2000, 'CA'), (8, 6, 3500, 'AUB'), (9, 4, 5000, 'AUB'), (10, 5, 9000, 'CA'), (11, 5, 1000, 'CA');
Вывод данных с счётом по колонке `type`
SELECT id, crew_id, amount, `type`, (CASE `type` WHEN @curType -- если тип совпадает THEN @curRow := @curRow + 1 -- тогда увеличиваем счётчик ELSE @curRow := 1 AND @curType := `type` END -- Если нет, то curType=новый_тип, и сбрасываем счётчик ) + 1 AS rank FROM Table1 p, -- Таблица с данными (SELECT @curRow := 0, @curType := '') r -- Delivered переменные счётчик и тип для rank ORDER BY TYPE DESC;
Результат будет
id | crew_id | amount | type | rank |
---|---|---|---|---|
11 | 5 | 1000 | CA | 1 |
10 | 5 | 9000 | CA | 2 |
3 | 5 | 8000 | CA | 3 |
4 | 4 | 1000 | CA | 4 |
7 | 4 | 2000 | CA | 5 |
9 | 4 | 5000 | AUB | 1 |
8 | 6 | 3500 | AUB | 2 |
6 | 6 | 3000 | AUB | 3 |
5 | 5 | 1000 | AUB | 4 |
2 | 4 | 1500 | AUB | 5 |
1 | 4 | 1000 | AUB | 6 |