Всем привет. Недавно столкнулся с нестандартной группировкой и хотелось бы понять, реально ли такое вообще сделать на чистом sql?
Например есть таблица
id | должность
1 | Сапожник
2 | Сапожник
3 | Сапожник
Нужно сделать так, чтобы sql выдал 2 записи,
Сапожник | 2
Сапожник | 1
Т.е. 2 и 1 это количество, и нужно именно группировать по 2 записи, если таких сапожников будет 5, то и в результате нужно получить 3 записи
Сапожник | 2
Сапожник | 2
Сапожник | 1
Антон Неверов, группировка по максимальному количеству людей в сущности. Т.е. как такогого параметра для группировки нет, т.е. нужно группировать по максимальному количеству элементов, конкретно в данном примере это количество - 2
Apxu, дорогой пользователь, настоятельно рекомендуем еще раз обратить самое пристальное внимание на п. 3.1 регламента работы сервиса (и, в особенности, на его последний абзац). В противном случае, ваши вопросы будут удаляться по причине тег-спама, а систематические нарушения приведут к блокировке учетной записи.
MySQL 8+
Идея такая (в порядке, обратном глубине вложенности):
1) Пронумеровать строки непрерывной последовательностью, отсортировав по id
2) Вывести для каждой строки остаток от деления номера строки на 2
3) Вывести для каждой строки сумму по столбцу остатка от деления нарастающим итогом (sum(mod_column) over (order by row_number))
4) Сгруппировать по полю этой суммы