gpt4 book ai didi

Django 通过额外选择中的计算字段进行注释

转载 作者:行者123 更新时间:2023-12-02 02:31:20 26 4
gpt4 key购买 nike

我有带有城市和年龄字段的人物模型。我需要按 3 个不同的年龄范围(< 20、20 到 50 和 > 50)划分每个城市的人数。我需要在一个 SQL 查询中完成此操作。

People.objects.extra(select={'young':'if(age < 20, 1, 0)', 
'med':'if (age > 20 and age < 50, 1, 0)',
'old':'if (age > 50, 1, 0)'}).\
values('city').\
annotate(sum_young=Sum('young'),
sum_med=Sum('med'),
sum_old=Sum('old'))

这不起作用,似乎注释不能通过计算字段来完成。

仅 MySQL 解决方案就足够了。

最佳答案

是的,不幸的是注释不适用于计算值,但您可以执行类似的操作来实现您想要的:

objects = People.objects.extra(select={'young':'if(age < 20, 1, 0)', 
'med':'if (age > 20 and age < 50, 1, 0)',
'old':'if (age > 50, 1, 0)'})
d = {}
for obj in objects:
if not d.get(obj.city):
d[obj.city] = {'young': 0, 'med': 0, 'old': 0, objects=[]}
d[obj.city]['objects'].append(obj)
if obj.young:
d[obj.city]['young'] += 1
elif obj.med:
d[obj.city]['med'] += 1
elif obj.old:
d[obj.city]['old'] += 1

然后在 d 字典中,你有城市作为键,然后你有城市的 young、med、old 计数和模型对象。

关于Django 通过额外选择中的计算字段进行注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12952675/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com