GroupBy und Summe in SQLAlchemy?
Ich versuche, zu Gruppe ein paar Felder in einer Tabelle, und dann die Summe der Gruppen, aber Sie sind immer doppelt gezählt.
Meine Modelle sind wie folgt:
class CostCenter(db.Model):
__tablename__ = 'costcenter'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
name = db.Column(db.String)
number = db.Column(db.Integer)
class Expense(db.Model):
__tablename__ = 'expense'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
glitem_id = db.Column(db.Integer, db.ForeignKey('glitem.id'))
glitem = db.relationship('GlItem')
costcenter_id = db.Column(db.Integer, db.ForeignKey('costcenter.id'))
costcenter = db.relationship('CostCenter')
value = db.Column(db.Float)
date = db.Column(db.Date)
Habe ich mit:
expenses=db.session.query(Expense,func.sum(Expense.value)).group_by(Expense.date).filter(CostCenter.id.in_([1,2,3]))
Wenn ich print-Ausgaben zeigt die SQL-Anweisung, die folgt. Es sieht korrekt zu mir, aber ich bin nicht so vertraut mit SQL. Das problem ist, dass die Werte ausgibt als sum_1 werden mehrfach gezählt. Wenn ich [1] item in die "Aussage" es wird die Summe aller drei. Wenn ich [1,2], es wird die Summe aller drei, und dann doppelklicken Sie es, und wenn ich [1,2,3], es wird die Summe aller drei-und Dreibettzimmer. Ich bin nicht sicher, warum es ist, zählen mehrfach. Wie kann ich dieses Problem beheben?
SELECT expense.id AS expense_id, expense.glitem_id AS expense_glitem_id, expense.costcenter_id AS expense_costcenter_id, expense.value AS expense_value, expense.date AS expense_date, sum(expense.value) AS sum_1
FROM expense, costcenter
WHERE costcenter.id IN (:id_1, :id_2, :id_3) GROUP BY expense.date
Dank!
InformationsquelleAutor TH22 | 2014-08-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es ein paar Probleme hier; Sie scheinen nicht zu sein, das Abfragen, die richtigen Dinge. Es ist sinnlos, um wählen Sie eine Ausgabe-Objekt bei der Gruppierung von Kosten.Datum. Da braucht es eine join-Bedingung zwischen CostCenter und Kosten, da sonst die Zeilen dupliziert werden, zählen jeweils für die einzelnen cost-center, aber keine Beziehung zwischen den beiden.
Ihre Abfrage sollte wie folgt Aussehen:
Erstellung dieses sql:
Hier ist eine einfache ausführbare Beispiel:
InformationsquelleAutor davidism