mysql如何实现每隔N行生成一个汇总行
小编给大家分享一下mysql如何实现每隔N行生成一个汇总行,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
处理这种每隔N行生成一个汇总行的需求,一共有三种方式
selectwhencisnullthen'汇总'else''ends,ifnull(c,sumc)cfrom(
selectceil(id/3)l,c,nullsumc
from
(
select@id:=@id+1id,t1.*fromtt1,(select@id:=0)vars
)t2
unionall
selectceil(id/3)l,null,from
(
select@id1:=@id1+1id,t1.*fromtt1,(select@id1:=0)vars
)t3
groupbyl
)torderbyl,ifnull(c,'9999');
结果:
第二招,数字辅助表补全. 性能较好. 计算汇总行,理解稍微复杂.
先增加一个数字辅助表 nums
table(intnull)delimiter $$
procedure pCreateNumscnt)
declare sdefault;
truncatenumswhile s=intoselect;
set=+;
end;
$$
;
create(intbegin
int1table;
insertnumsswhile s2=intoselect+from;
set=*;
end;
$$
;
初始化数字辅助表
selects,ifnull(c,cc)c
from(
select
whenrnisnullthen'汇总'else''ends,
t4.c,
if(mod(t3.id,4)!=0,when@total=-1then@total:=t4.celse@total:=@total+t4.cend,@total)cc,
whenmod(t3.id,4)=0then@total:=-1elsenullend
from(
select*fromnumswhereid<=
(select(ceil(fromt)
)t3
join(
select
whenmod(@rn+1,4)=0then@rn:=@rn+2else@rn:=@rn+1endrn,
t1.*fromtt1,(select@rn:=0,@total:=0)vars
)t4on(t3.id=t4.rn)
)result;
这个理解稍微有点复杂,
第二招改进版本
selectwhenidisnullthen'汇总'else''ends,from(
select@id:=@id+1id,t1.*fromtt1,(select@id:=0)vars
)t2
groupbyceil(t2.id/3),t2.idwithrollup;
以上是“mysql如何实现每隔N行生成一个汇总行”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。