Django group_by参数取决于order_by

ezdazuzena

我(再一次)在使用Django的注释功能(实际的SQL查询对我来说很清楚)而苦苦挣扎。

目标:

我想以某种方式获得用户数量status(它可以只是模型的任何列)。

方法:

1) User.objects.values('status').annotate(count=Count('*'))

结果进入以下SQL查询

SELECT users_user.status, COUNT(*) as count
FROM users_user
GROUP BY users_user.id
ORDER BY usser_user.id ASC

但是,这将为我提供所有用计数值“注释”的所有用户的查询集。这是我所期望的行为。

2) User.objects.values('status').annotate(count=Count('*')).order_by()

结果进入以下SQL查询

SELECT users_user.status, COUNT(*) as count
FROM users_user
GROUP BY users_user.status

ORDER BY,现在GROUP BY参数是status列。这不是我期望的结果,而是我一直在寻找的结果

问题:为什么不order_by()带任何参数的Django会影响SQLGROUP BY参数?(或更广泛地说,第二种方法为什么“起作用”?)

一些细节

  • Django 2.2.9
  • PostgreSQL 9.4
伊维萨尼

在这里解释

在选择输出数据时,将使用查询集的order_by()部分中提到的字段(或在模型的默认排序中使用的字段),即使在values()调用中未另行指定时也是如此。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

TOP 榜单

热门标签

归档