mysql 多表运算的问题

mysql 多表运算的问题,第1张

我用的MYsql 具体函数有一点点出入:而且你的表名建的太刺激了,都是in、out、return等关键字,我在表名上都添加了一个数字1,即 in1,out1,back1,return1,transfer1:

select

in1.id,

in1.amount -

if(in1.id in(select `inId` from out1), (select sum(out1.`amount`) from out1 where out1.inId=in1.id),0) +

if(in1.id in(select out1.`inId` from out1,back1 where out1.id=back1.outId),(select sum(back1.`amount`) from back1,out1 where out1.inId=in1.id and out1.id=back1.outId),0) -

if(in1.id in(select `inId` from transfer1),(select sum(transfer1.`amount`) from transfer1 where in1.id=transfer1.inId),0)-

if(in1.id in(select `inId` from return1), (select sum(return1.`amount`) from return1 where return1.inId=in1.id),0) as total

from in1

经过测试后结果为:

id, total

1.490

2.486

3.489

希望能对你有所帮助

统计信息是数据库基于成本的优化器最重要的参考信息;统计信息不准确,优化器可能给出不够优化的执行计划或者是错误的执行计划。对统计信息的计算分为非持久化统计信息(实时计算)与持久化统计信息。

非持久化统计信息

统计信息没有保存在磁盘上,而是频繁的实时计算统计信息;

每次对表的访问都会重新计算其统计信息;

假设针对一张大表的频繁查询,那么每次都要重新计算统计信息,很耗费资源。

持久化统计信息

把一张表在某一时刻的统计信息值保存在磁盘上;

避免每次查询时重新计算;

如果表更新不是很频繁,或者没有达到 MySQL 必须重新计算统计信息的临界值,可直接从磁盘上获取;

即使 MySQL 服务重启,也可以快速的获取统计信息值;

统计信息的持久化可以针对全局设置也可以针对单表设置。

接下来,详细说 MySQL 统计信息如何计算,何时计算,效果评估等问题。在 MySQL Server 层来控制是否自动计算统计信息的分布,并且来决策是持久化还是非持久化。

SELECT i.uid,sum(deposit+ddeposit+money) as allmoney FROM

另外,因为你是多个表的左联接,考虑到有NULL记录的存在,建议你用函数ifnull处理下,避免由于NULL而造成结果有误,最终改成这样:

SELECT i.uid,sum(ifnull(deposit,0)+ifnull(ddeposit,0)+ifnull(money,0)) as allmoney

FROM pw_memberinfo i LEFT JOIN pw_members m ON m.uid=i.uid LEFT JOIN pw_memberdata d ON i.uid=d.uid

where ifnull(deposit,0)+ifnull(ddeposit,0)+ifnull(money,0)>2000


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/7572907.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-07
下一篇2023-04-07

发表评论

登录后才能评论

评论列表(0条)

    保存