假设我有下表fruits
:
id | type | name
-----------------
0 | apple | fuji
1 | apple | mac
2 | orange | navel
我的目标是最终计算出不同的数量types
以及以逗号分隔的列表names
:
apple, 2, "fuji,mac"
orange, 1, "navel"
这可以很容易地完成GROUP_CONCAT
在 MySQL 中,但我在 Django 等价物上遇到了麻烦。这是我到目前为止所拥有的,但我缺少GROUP_CONCAT
stuff:
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)