Requête avec GROUP BY dans Django
Lors de l'interrogation d'un modèle de base de données, il est souvent nécessaire de regrouper les résultats par un champ spécifique pour obtenir informations agrégées. Dans Django, cette fonctionnalité n'est pas directement supportée par la méthode group_by. Cependant, il existe plusieurs approches pour obtenir un résultat similaire sans modifier la base de code de Django.
Une approche consiste à exploiter les fonctionnalités d'agrégation de Django. L'agrégateur Count peut être utilisé pour compter le nombre d'occurrences d'un champ, regroupées par un champ spécifié. Par exemple, pour regrouper les membres par leur désignation et compter les occurrences de chaque désignation :
from django.db.models import Count result = (Members.objects .values('designation') .annotate(dcount=Count('designation')) .order_by() )
Cette requête produit des résultats similaires à :
[{'designation': 'Salesman', 'dcount': 2}, {'designation': 'Manager', 'dcount': 2}]
Plusieurs champs peuvent être inclus dans les valeurs argument pour renvoyer des informations supplémentaires. Par exemple :
.values('designation', 'first_name', 'last_name')
La documentation Django fournit des informations détaillées sur les constructions Values(), Annotate() et Count :
Il est important de noter qu'en excluant le L'argument order_by() peut conduire à des résultats inattendus, surtout si le comportement de tri par défaut n'est pas souhaitable.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!