2016-11-16 3 views
0

Ich muss Elemente aus einer Tabelle zählen. Das Problem ist, dass ich eine Lösung dafür habe, aber ich benutze eine Funktion, die Duplikate aus der Tabelle löscht und dann kann ich die Zählung ohne Problem bekommen (aber es dauert eine Weile zu verarbeiten) Dies ist ein Beispiel für mein Modell/Tabelle:Zählen von Daten aus einer Tabelle ohne Duplikate

enter image description here

Wenn ich eine Zählung von dies tun werde ich folgendes Ergebnis: 3 geliefert, 4 zugeordnet, 2 Nein-Status, 1 geladen.

Was ich brauche ist, um das folgende Ergebnis zu erhalten: 2 gesendet (Ignorieren 1 Duplikat), 1 zugeteilt (3 Duplikate ignorieren), 2 kein Status (Es gibt keine Duplikate), 1 geladen.

Vielen Dank für Ihre Zeit,

+0

Können Sie teilen, welchen Code Sie ausprobiert haben und was Sie getan haben? Es wird einfacher zu beantworten sein, wenn wir wissen, wie die Daten gelesen und gespeichert werden. – nbryans

Antwort

1

Wenn Sie PostgreSQL verwenden Sie die folgende verwenden können DISTINCT ON

Model.objects.order_by('field').dictinct('field').count() 

Wenn Sie MySQL verwenden verwenden, können Sie

Model.objects.order_by('field').aggregate(count=Count('field', distinct=True))['count'] 

verwenden Sie brauchen Sie order_by das Feld, das Sie zu deutlich, there is more information in the docs

übergeben
+0

Also, als Beispiel, wenn ich zählen möchte, wie viele Lieferungen ich basierend auf ihrem SOSS hatte, sollte die Modellabfrage lauten: Model.objects.order_by ('Shipped'). Aggregate (count = Count ('Shipped', distinct = True)) ['zählen']? oder erkläre ich, einen duplizierten SOSS zu überspringen. – Deluq

+1

Sie würden 'Model.objects.filter (status = 'Shipped'). Order_by ('soss'). Aggregate (count = Anzahl ('soss', distinct = True)) ['count']' –

+0

Ich bin Fehler nach dem Aggregat – Deluq

Verwandte Themen