Один очень удобный способ «сгруппировать» по какому-либо полю (или по множеству полей и выражений, но я буду использовать «поле» для простоты! -) - это когда вы можете организовать просмотр результатов перед группировкой (RBG) в сортированном виде - вы на самом деле не заботитесь о сортировке (за исключением общего случая, когда ORDER BY также присутствует и находится в том же поле, что и GROUP BY! -), а скорее о свойство побочного эффекта упорядочения - все строки в RBG с одинаковым значением для поля группировки располагаются сразу друг за другом, так что вы можете накапливать, пока поле группировки не изменится, затем вывести / выдать результаты, накопленные до сих пор, и продолжить для повторной инициализации аккумуляторов с новой строкой (с другим значением поля группировки) - убедитесь, что «просто инициализировали аккумуляторы» в самом начале, И «просто испустите / выдайте накопленные результаты» в самом конце, конечно.
Если это не работает, возможно, вы можете хэшировать поле группировки и использовать хеш-таблицу для результатов, которые накапливаются для этой группы - в каждой строке в RBG хэшируйте поле группировки, проверьте, присутствовало ли оно как ключ в хэш-таблице, если он не помещен туда с аккумуляторами, соответствующим образом инициализированными из строки RBG, иначе обновите аккумуляторы для строки RBG. Вы просто излучаете все в конце. Проблема, конечно, в том, что ты занимаешь больше памяти до конца! -)
Это два фундаментальных подхода. Хочешь псевдокод для каждого, кстати?