J'ai besoin de récupérer une liste d'enregistrements pour le tableau suivant avec des valeurs distinctes en ce qui concerne Nom: J'ai besoin de vous débarrasser de toutes les valeurs dupliquées pour le nom et ne montre que le Suivant: P> name value
A ------------------ 30
B ------------------ 10
C ------------------ 20
D ------------------ 10
5 Réponses :
de cette façon, vous obtenez seulement une liste [A, B, C, d] des valeurs, pas les objets générés. P> p> .Distinct () code> est l'outil, mais voici la syntaxe que j'ai dû utiliser:
Cela fonctionnera uniquement avec PostgreSQL. Si vous utilisez MySQL ou SQLite, vous avez mal de chance.
@Serafims. Cela fonctionne dans MySQL et SQLite. Faire distinct sur i> ne fonctionne pas PostgreSQL, mais la requête de cette réponse ne fait pas un distinct!
Vous pouvez également utiliser cru comme: p>
ou ajouter une commande pour avoir la valeur supérieure pour tout groupe: p>
Dans tous les cas, vous pouvez avoir Documentation utile ici: https://docs.djangoproject.com/ FR / 2.0 / TOCKS / DB / SQL / P> Queryraw = c.Object.raw ('Sélectionnez le nom, la valeur du groupe PRJ_C par nom') code> p>
Queryraw = C.ObjectS.raw ('Sélectionnez le nom, la valeur du groupe PRJ_C par nom Commande par valeur') Code> P>
liste () code> d'objets. p>
problème avec SQLite distinct est-il distinct sur toutes les valeurs retournées. Pour distinct sur un nom de colonne, par exemple: «URL» pour obtenir toutes les URL uniques d'une table, mais également obtenir le reste des données, utilisez une sous-requête.
La sous-requête obtient les identifiants de l'URL et utilise ensuite cela faire une autre requête sur ces idées. Ceci n'est pas aussi rapide qu'un distinct régulier bien sûr. P> (au moment où les réponses précédentes sont données, Django n'avait pas encore de fonctionnalité de sous-requête.) P> p>
Où dois-je inclure le nombre et la minute?
Ce n'est pas super élégant, mais cela fait le travail d'environ une ligne:
# Fetch all rows to limit num of queries all_rows = MyModel.objects.all() # Query against the full list to return a list of objects item_list = [all_rows.filter(myfield=item['myfield']).last() for item in MyModel.objects.values('myfield').distinct()]
L'utilisation de la syntaxe suivante doit résoudre votre problème. valeurs ("nom", "valeur"). Distinct () P>
Voulez-vous simplement la première valeur pour chaque nom, ou quoi?
Eh bien, vous devriez en choisir un, car les premières et dernières valeurs sont différentes. Voulez-vous vraiment aléatoire arbitraire?
J'ai en fait besoin de la dernière valeur. Mais pour cet exemple, j'ai mis en premier comme je pensais qu'il n'y a pas de différence.