gpt4 book ai didi

python - Django group_by 参数取决于 order_by

转载 作者:行者123 更新时间:2023-12-01 06:33:44 25 4
gpt4 key购买 nike

我(再次)在 Django 的注释功能上苦苦挣扎,其中实际的 SQL 查询对我来说非常清楚。

目标:

我想获取具有某种状态的用户数量(可以是模型的任何列)。

方法:

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 列。这不是我所期望的,而是我正在寻找的结果

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

一些细节:

  • Django 2.2.9
  • postgres 9.4

最佳答案

这已解释here

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

关于python - Django group_by 参数取决于 order_by,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59767945/

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