works:programmer:db-mysql:row-number-using-group
Считать номера полей по группе
Пример таблицы
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 |
works/programmer/db-mysql/row-number-using-group.txt · Последнее изменение: 2022/10/30 05:51 — 127.0.0.1