【问题标题】:How to group by and return values from each group?如何分组并从每个组返回值?
【发布时间】:2013-07-25 03:49:33
【问题描述】:

我有这样的桌子

id p_id number 
1   1   12 
2   1   13
3   2   14
4   2   15

在我看来如何获得这些物品, 我的意思是按 p_id 分组并从组中获取数值

for p_id 1 returns count 2 and 12,13
for p_id 2 returns count 2 and 14,15

【问题讨论】:

    标签: django django-views django-orm


    【解决方案1】:

    你可以使用values()annotate()进行分组,所以:

    from django.db.models import Count
    pid_group = YourModel.objects.values('p_id').annotate(ncount=Count('number'))
    

    之后你会得到一个字典列表pid_group,如下所示:

    [{'p_id': 1, 'ncount': 2}, {'p_id': 2, 'ncount': 2}]
    

    那么你就可以轻松获取数值了:

    for pid in pid_group:
        number_values = YourModel.objects.filter(p_id=pid.get('p_id'))
    

    希望对你有帮助。

    【讨论】:

    • 很好,但在内存中获取对象和处理并将它们分组可能更有效。
    猜你喜欢
    • 2011-11-06
    • 2015-07-12
    • 1970-01-01
    • 2015-10-26
    • 1970-01-01
    • 2019-02-28
    • 2022-06-14
    • 2018-11-26
    • 1970-01-01
    相关资源
    最近更新 更多