Не тратьте слишком много времени, пытаясь отточить крутое решение SQL.
from collections import defaultdict
count_cat_code = defaultdict(int)
count_unique_code = defaultdict(int)
count_combo_code = defaultdict(int)
for obj in Item.objects.all():
count_cat_code[obj.category_code] += 1
count_unique_code[obj.unique_code] += 1
count_combo_code[obj.category_code,obj.unique_code] += 1
Это сделает это.И это будет работать достаточно быстро.Действительно, если вы проведете некоторый тест, вы можете обнаружить, что иногда - это так же быстро, как выражение «чистый SQL»
[Почему?Потому что СУБД должна использовать довольно неэффективный алгоритм для выполнения GROUP BY и Counts.В Python мы можем позволить себе некоторые вещи, основанные на нашем приложении и наших знаниях о данных.В этом случае, например, я предполагал, что все это уместится в памяти.Предположение, которое не может быть сделано внутренними алгоритмами СУБД.]