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 · Last modified: 2022/10/30 05:51 by Chugreev Eugene