gpt4 book ai didi

django - 如何在不使用聚合函数的情况下在 Django 中执行 GROUP BY?

转载 作者:行者123 更新时间:2023-12-01 04:09:37 24 4
gpt4 key购买 nike

如何在不调用 Max、Sum、Avg 等聚合函数的情况下在 Django 中执行 GROUP BY?

就我而言,我有一个包含类似 { local_path, parent, grandparent } 列的表。 ,我想做SELECT local_path FROM ... WHERE grandparent = "foo" GROUP BY parent .将有多个行的祖 parent 为“foo”且 parent 相同,但我只想要他们的 local_path 中的一个(任何一个)。

正如你所看到的,我不想对任何东西进行汇总。而且我无法让 distinct() 工作,因为我想找到非不同的 local_paths。

我在没有任何运气的情况下搜索并阅读了文档。谢谢!

最佳答案

这是一个让 Django 执行 GROUP BY 的技巧。查询而不运行聚合函数。我们定制 Func被 Django 视为聚合函数但实际上只是评估为 NULL 的子类在 SQL 查询中。

from django.db.models import Func, CharField


class NullAgg(Func):
"""Annotation that causes GROUP BY without aggregating.

A fake aggregate Func class that can be used in an annotation to cause
a query to perform a GROUP BY without also performing an aggregate
operation that would require the server to enumerate all rows in every
group.

Takes no constructor arguments and produces a value of NULL.

Example:
ContentType.objects.values('app_label').annotate(na=NullAgg())
"""
template = 'NULL'
contains_aggregate = True
window_compatible = False
arity = 0
output_field = CharField()

关于django - 如何在不使用聚合函数的情况下在 Django 中执行 GROUP BY?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7071144/

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