Abfragen mit GROUP BY in Django
Bei der Abfrage eines Datenbankmodells ist es häufig erforderlich, die Ergebnisse nach einem bestimmten Feld zu gruppieren, um sie zu erhalten aggregierte Informationen. In Django wird diese Funktionalität nicht direkt von der Methode group_by unterstützt. Es gibt jedoch mehrere Ansätze, um ein ähnliches Ergebnis zu erzielen, ohne die Django-Codebasis zu ändern.
Ein Ansatz besteht darin, die Aggregationsfunktionen von Django zu nutzen. Der Count-Aggregator kann verwendet werden, um die Anzahl der Vorkommen eines Felds zu zählen, gruppiert nach einem angegebenen Feld. Um beispielsweise Mitglieder nach ihrer Bezeichnung zu gruppieren und das Vorkommen jeder Bezeichnung zu zählen:
from django.db.models import Count result = (Members.objects .values('designation') .annotate(dcount=Count('designation')) .order_by() )
Diese Abfrage erzeugt ähnliche Ergebnisse wie:
[{'designation': 'Salesman', 'dcount': 2}, {'designation': 'Manager', 'dcount': 2}]
Mehrere Felder können in die Werte einbezogen werden Argument, um zusätzliche Informationen zurückzugeben. Zum Beispiel:
.values('designation', 'first_name', 'last_name')
Die Django-Dokumentation bietet ausführliche Informationen zu den Konstrukten „values()“, „annotate()“ und „Count“:
Es ist wichtig zu beachten, dass mit Ausnahme der Das Argument order_by() kann zu unerwarteten Ergebnissen führen, insbesondere wenn das Standardsortierverhalten nicht wünschenswert ist.
Das obige ist der detaillierte Inhalt vonWie gruppiere ich Abfrageergebnisse in Django, ohne group_by() zu verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!