Я пытаюсь сгруппировать несколько полей в таблице, а затем суммировать группы, но они получают двойной счет.
Мои модели выглядят следующим образом:
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)
Я использовал:
expenses=db.session.query(Expense,func.sum(Expense.value)).group_by(Expense.date).filter(CostCenter.id.in_([1,2,3]))
Когда я печатаю расходы, он показывает следующий SQL-оператор. Это выглядит правильно для меня, но я не очень знаком с SQL. Проблема в том, что значения, которые он выводит как sum_1, подсчитываются несколько раз. Если у меня есть [1] элемент в «в статусе», он будет суммировать все три. Если у меня есть [1,2], он сложит все три, а затем удвоит его, а если у меня будет [1,2,3], он сложит все три и утроит его. Я не уверен, почему он рассчитывает несколько раз. Как я могу это исправить?
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
Спасибо!