Что происходит на уровне БД при группировке?
По разному. Я думаю что разные DBMS (SQlite, Oracle) могут по разному обрабатывать группировку.
Правильный ответ на вопрос - посмотреть execution plan комадой 
explain (plan) select ..... group by....;
Наперед угадать какой будет использовал алгоритм - невозможно. Как вы помните
язык SQL - это декларативный язык который декларирует свойства результата а не метод
которым разрабочик хочет что-то сделать. 

Oracle например имеет много conditions для исполнения группировки например:
1) Какой оценочный объем выборки? Может ли она быть отсортирована in-memory (sort-area-size) в противном
случая будет external sorting в TEMP tablespace.
2) Есть-ли композитный или простой индекс по полям группировки? В этом случае будет index-scan.
3) Требует ли запрос немедленной выдачи первой пачки (хинт +FIRST_ROWS) или можно подождать
но получить весь объем быстрее. Это тоже влияет на выбор алгоритма.

Это всё эвристики которые влияют на выбор окончательного алгоритма.

И уже к сортированной выборке собственно применяется лямбда которая делает группирующую операцию
AVG, SUM, COUNT ... e.t.c. и выдает строки курсора.
Сортировка там происходит, конкретная реализация зависит от движка. 
Посмотрите код sqlite он довольно маленький и в нем можно разобраться