GRUPPE_CONCAT-Funktionalität in Django erhalten
Django erweitert das Konzept von GROUP_CONCAT in MySQL und bietet einen alternativen Ansatz, um ähnliche Ergebnisse zu erzielen. In Django kann GROUP_CONCAT durch die Verwendung einer benutzerdefinierten Aggregatfunktion emuliert werden.
Erstellen einer Concat-Aggregatfunktion:
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)
Mit dieser benutzerdefinierten Aggregatfunktion können Sie kann jetzt GROUP_CONCAT-Operationen innerhalb von Django-Abfragesätzen ausführen.
Beispiel Verwendung:
Betrachten Sie eine Obsttabelle mit den folgenden Daten:
id | type | name |
---|---|---|
0 | apple | fuji |
1 | apple | mac |
2 | orange | navel |
Um eine Anzahl der verschiedenen Fruchtarten zusammen mit einer durch Kommas getrennten Liste ihrer Namen abzurufen:
query_set = Fruits.objects.values('type').annotate(count=Count('type'), name = Concat('name')).order_by('-count')
Dieser Abfragesatz gibt die folgenden Ergebnisse zurück:
type | count | name |
---|---|---|
apple | 2 | fuji,mac |
orange | 1 | navel |
Das obige ist der detaillierte Inhalt vonWie repliziere ich die GROUP_CONCAT-Funktionalität von MySQL in Django?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!