按整数范围分组 Django 和 postgres

group by integer range Django & posgres

我有一个 table,我想按整数范围(年龄)分组。 table 例如:

Name   Age
John   21
Steve  24
Dan    29 
Mike   31 

我的预期结果是按年龄范围对姓名进行分组,例如 [21-28] [29-33] 所以我会得到以下结果:

[21-28] [29-33]
  John    Dan
  Steve   Mike

我一直在玩 Django 的注释功能,但到目前为止还想不通。

有什么建议吗?

看来您的群组数量有限,为什么不对每个群组进行查询?

21_28_group = Person.objects.filter(age__gte=21).filter(age__lte=28)
29_33_group = Person.objects.filter(age__gte=29).filter(age__lte=33)

如果你想注释它属于哪个年龄段,使用conditional annotation(Case)像这样:

from django.db.models import Case, CharField, Value, When

Person.objects.annotate(
     age_group = Case(
          When(age__range=[21, 27], value=Value('21-27')),
          When(age__range=[29, 33], value=Value('29-33')),
          default=Value('No group'),
          output_field=CharField(),
     )
).values('age', 'age_group')