gpt4 book ai didi

python - 如何选择列而不在 group by 子句中放置非聚合列

转载 作者:太空宇宙 更新时间:2023-11-03 18:52:43 25 4
gpt4 key购买 nike

我想知道如何选择列而不将它们放在 group by 子句中例如:

select id, name, count(score) from users
group by name
order by count(score) desc

这里我不想按ID列分组

有人吗?

提示:Django 不允许我使用 min、max、avg、top,我需要强制选择没有函数的 ID。

最佳答案

来自MySQL documentation :

In standard SQL, a query that includes a GROUP BY clause cannot refer to nonaggregated columns in the select list that are not named in the GROUP BY clause.

这意味着在单个查询中实现您想要的结果的唯一方法是使用OUTER JOIN 语句。据我所知,Django ORM 不支持从表到自身的 OUTER JOIN 语句。

除了使用原始 SQL 语句之外,获得所需内容(所有模型的列表,包括 ID,以及每个唯一名称出现次数的计数)的唯一方法是使用 2 个单独的查询和用 Python 处理它们。

不过,我确实想知道您是否不想使用 SUM 而不是 COUNTCOUNT 为每个 NON-NULL 值(包括 0)加 1,而 SUM 将实际数值添加到柱子。

无论如何,一个例子如下:

qs = Foo.objects.values('name').annotate(count=Count('id')) # or sum=Sum('score')
count = dict((x['name'], x['count']) for x in qs)
object_list = Foo.objects.all()
for foo in object_list:
foo.count = count['name']

关于python - 如何选择列而不在 group by 子句中放置非聚合列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17932695/

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