按整数范围分组 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')
我有一个 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')