gpt4 book ai didi

mysql - Django 中的 GROUP_CONCAT 等效项

转载 作者:IT老高 更新时间:2023-10-29 00:01:44 38 4
gpt4 key购买 nike

假设我有下表fruits:

id | type   | name
-----------------
0 | apple | fuji
1 | apple | mac
2 | orange | navel

我的目标是最终得出不同类型的数量和名称的逗号分隔列表:

apple, 2, "fuji,mac"
orange, 1, "navel"

这可以在 MySQL 中使用 GROUP_CONCAT 轻松完成,但我在使用 Django 等效项时遇到了问题。这是我到目前为止所拥有的,但我缺少 GROUP_CONCAT 内容:

query_set = Fruits.objects.values('type').annotate(count=Count('type')).order_by('-count')

如果可能,我想避免使用原始 SQL 查询。

任何帮助将不胜感激!

谢谢! =)

最佳答案

您可以创建自己的聚合函数 (doc)

from django.db.models import Aggregate

class Concat(Aggregate):
function = 'GROUP_CONCAT'
template = '%(function)s(%(distinct)s%(expressions)s)'

def __init__(self, expression, distinct=False, **extra):
super(Concat, self).__init__(
expression,
distinct='DISTINCT ' if distinct else '',
output_field=CharField(),
**extra)

并将其简单地用作:

query_set = Fruits.objects.values('type').annotate(count=Count('type'),
name = Concat('name')).order_by('-count')

我正在使用 django 1.8 和 mysql 4.0.3

关于mysql - Django 中的 GROUP_CONCAT 等效项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10340684/

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