Один очень удобный способ «сгруппировать по» некоторым полем (или набором полей и выражений, но я буду использовать «поле» для простоты!) - это когда вы можете организовать просмотр результатов перед группировкой (RBG) в порядке сортировки - на самом деле вы не заботитесь о сортировке (за исключением обычного случая, в котором ORDER BY также существует и просто находится в том же поле, что и GROUP BY! -), а скорее свойство «побочного эффекта» упорядочения - все строки в RBG с одинаковым значением для поля группировки поступают сразу друг за другом, поэтому вы можете накапливать до тех пор, пока поле группировки не изменится, затем испустите/покажите результаты, накопленные до сих пор, и приступить к повторной инициализации аккумуляторов новой строкой (той, которая имеет другое значение поля группировки) - убедитесь, что «просто инициализируйте аккумуляторы» в самом начале, И «просто испускайте/отдавайте накопленные результаты» в самом конце , конечно ,
Если это не сработает, возможно, вы можете хэшировать поле группировки и использовать хеш-таблицу для результатов, накопленных для этой группы - в каждой строке в RBG хешировать поле группировки, проверить, было ли оно уже присутствовать как ключ в хэш-таблице, если не поставить его там с аккумуляторами, подходящим образом инициализированными из строки RBG, а также обновлять аккумуляторы в строке RBG. Вы просто испускаете все в конце. Проблема, конечно, в том, что вы занимаете больше памяти до конца! -)
Это два фундаментальных подхода. Вы хотите, чтобы псевдокод для каждого, BTW?
Бьюсь об заклад, вы закончили оптимизацию на этом этапе, но Уэс МакКинни написал немного о том, как он подошел к группе по проблеме в своей библиотеке Pandas: http://wesmckinney.com/blog/mastering-high -Информация-данные-алгоритмы-i-group-by/ – DGrady