django - 查询以按外键项的数量对模型进行分类
问题描述
我有以下型号:
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)
我需要编写一个查询以获得以下结果:
家庭计数 | 个人计数 1 | 3 5 | 8 10 | 19
所以,我需要根据他们拥有的人数对家庭进行分类(不是作为他们的family_id,而是作为他们的计数!)。可能吗?如果是,如何?
到目前为止,我能够得到每个 family_id 有多少人:
overview_data = Family.objects.annotate(ind_count=Count('individual')).order_by('ind_count')
现在我需要一种方法来按他们的小组拥有的人数来总结他们。
解决方案
目前我不是通过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
2
SQL
推荐阅读
- ibm-doors - 如何在 DOORS 中一次删除多行?
- ruby - 使用 Reduce 修改 ruby 中字符串中的某些单词
- ios - WKWebView评估JavaScript仅在视图消失时才起作用swift 4
- json - 如何将第二个项目添加到 JSON 数组中,只有当有一个?
- node.js - 在 express 应用中关联两个 mongoose 数据库
- python - 如何在 Pandas 中准备数据集以使用 Python NetworkX 进行网络分析?
- monads - 使用 getTime 函数时遇到问题
- java - itext7 设置印章注释字体
- arrays - ValueError:无法将大小为 10 的数组重新整形为形状 (10,3,32,32)
- google-apps-script - 我可以在 Google 表格中将两个脚本合并为一个按钮吗?