使用 group_by 将两个不同表列的总和获取到单个列

Posted

技术标签:

【中文标题】使用 group_by 将两个不同表列的总和获取到单个列【英文标题】:Getting sum of two different tables columns to single column with group_by 【发布时间】:2020-07-16 07:58:43 【问题描述】:

首先查询 InvoiceOne 表到 group_by 类别并得到 totalExGst 的总和:

sortCategory = db.session.query(
            InvoiceOne.category, db.func.sum(
                InvoiceOne.totalExGst).label('Total')
        ).filter(and_(InvoiceOne.storeNumber == '98376', InvoiceOne.weekEndDate == '2020-03-22')).group_by(InvoiceOne.category)

第二次查询对 BankData 表做同样的事情:

sortCategory = db.session.query(
            BankData.category, db.func.sum(
                BankData.debit).label('Total_BankData')
        ).filter(and_(BankData.storeNumber == '98376', BankData.weekEndDate == '2020-03-22')).group_by(BankData.category)

我想将这个查询连接在一起,而不是得到 Total Total_BankData

我只能得到一列的总数。

【问题讨论】:

无法真正告诉您要在这里添加什么;你能发布他们现在给你的示例输出和所需的输出吗? 【参考方案1】:

我建议你使用子查询:

sortCategory1 = db.session.query(
    InvoiceOne.category,
    db.func.sum(InvoiceOne.totalExGst).label('Total')
).filter(
    and_(
        InvoiceOne.storeNumber == '98376',
        InvoiceOne.weekEndDate == '2020-03-22')
).group_by(InvoiceOne.category).subquery()

sortCategory2 = db.session.query(
    BankData.category, 
    db.func.sum(BankData.debit).label('Total_BankData')
).filter(
    and_(
        BankData.storeNumber == '98376', 
        BankData.weekEndDate == '2020-03-22')
).group_by(BankData.category).subquery()


sortCategoryTotal = db.session.query(
    sortCategory1.c.category,
    sortCategory1.c.Total + sortCategory2.c.Total_BankData
).join(sortCategory2, sortCategory1.c.category == sortCategory2.c.category)

【讨论】:

您好 Thibaut,感谢上述解决方案,它正在工作,但是,如果它们不相似,我需要两个表中的所有类别,因为 sortCategory1.c.category == sortCategory2.c.category,只获得两个表中的相似类别.任何解决方案。另外,我是 sqlAlchemy 的新手,如果得到上述代码的解释,我将不胜感激

以上是关于使用 group_by 将两个不同表列的总和获取到单个列的主要内容,如果未能解决你的问题,请参考以下文章

复合求和:我想创建一个复合查询,它从两个不同的表中获取两列的单独总和,然后对它们求和

在 sqlalchemy 中使用 distinct()/group_by() 获取基于每个“名称”列的最新记录

MySQL - 在两个group_by之后尝试两列的sum()

页脚中的 DataTables.net 表列总和

如何将数据库表的总和获取到变量?

如何使用外表中的外键获取主表列(例如:Pricena列)的总和?