mysql求和 子查询_Mysql重新使用子查询的总和

我的愿望是重新使用sum1和sum2而不再计算它们

哇,稳稳地说。原始查询不如它有效。在不知道数据分布是什么样的情况下,很难建议最合适的查询是什么,但假设A和B中的元组在表T上具有外键约束(隐式或显式)但彼此没有隐式外键约束,t.id是唯一的,tableT中的大多数行在tableA和tableB中都有相应的行....

SELECT t.*, sum_f1, sum_f2

FROM tableT t

LEFT JOIN (SELECT a.id, SUM(f1) AS sum_f1

FROM tableA a

GROUP BY a.id) AS a_agg

ON t.id=a_agg.id

LEFT JOIN (SELECT b.id, SUM(f2) AS sum_f2

FROM tableB b

GROUP BY b.id) as b_agg

ON t.id=b_agg.id

GROUP BY t.id

会更有效率。

(这也假设ONLY_FULL_GROUP_BY被禁用 - 否则你需要在SELECT子句中替换&#t; *'并在group by子句中替换&t;。表中需要的每个属性)。

请注意,在实践中,您很少会在单个查询中查看所有您的数据。由于MySQL不能很好地处理推送谓词,只需在外部SELECT中添加过滤器可能不是最佳解决方案。

如上所述,您构建了自己的查询后,添加总结就变得微不足道了:

SELECT t.*, sum_f1, sum_f2,

IFNULL(sum_f1,0)+INFULL(sum_f2,0) AS sum3

FROM tableT t

LEFT JOIN (SELECT a.id, SUM(f1) AS sum_f1

FROM tableA a

GROUP BY a.id) AS a_agg

ON t.id=a_agg.id

LEFT JOIN (SELECT b.id, SUM(f2) AS sum_f2

FROM tableB b

GROUP BY b.id) as b_agg

ON t.id=b_agg.id

GROUP BY t.id

(但请注意,我已经对您的数据和架构进行了批次>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值