我有以下型号:
Family():
family_id = models.CharField(db_index=True, max_length=100)
Individual():
individual_id = models.TextField(db_index=True)
family = models.ForeignKey(Family, on_delete=models.PROTECT)
我需要编写查询以获取以下结果:
Family Count | Individual Count 1 | 3 5 | 8 10 | 19
因此,我需要按家庭人数对家庭进行分类(不是其family_id,而是其计数!)。可能吗?如果是的话,怎么办?
到目前为止,我能够获得每个family_id有多少个人:
overview_data = Family.objects.annotate(ind_count=Count('individual')).order_by('ind_count')
现在,我需要一种方法来按组中的个人人数进行汇总。
答案 0 :(得分:0)
目前,我无法通过SQL
查询来解决此问题,而是使用python解决了。我相信可以纯粹使用SQL
查询,但是我无法提出。因此,如果您有任何想法,请回答。这是我解决问题的方法:
from collections import Counter
def _generate_overview_data(project):
data = Family.objects.annotate(ind_count=Count('individual'))
.values_list('ind_count', flat=True)
return sorted(Counter(data).items())
data
看起来像[1, 1, 1, 1, ..., 2, 2, ..., 3, 3, 3, ...]
因此,我计算了1、2、3的出现次数,并得到了[[1, 89], [2, 10], ...]
类型的有序列表,其中89
个家庭有1
个个人,10
个家庭有{{ 1}}个人等;那就是我更愿意直接从2
那里得到的东西。