小编给大家分享一下MySQL如何实现每隔N行生成一个汇总行,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
公司主营业务:成都网站制作、做网站、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联公司是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联公司推出梅里斯免费做网站回馈大家。
处理这种每隔N行生成一个汇总行的需求,一共有三种方式
select when c is null then '汇总' else '' end s,ifnull(c,sumc) c from (
select ceil(id/3) l,c,null sumc
from
(
select @id:=@id+1 id, t1.* from t t1,(select @id:=0) vars
) t2
union all
select ceil(id/3) l,null,from
(
select @id1:=@id1+1 id, t1.* from t t1,(select @id1:=0) vars
) t3
group by l
) t order by l,ifnull(c,'9999');
结果:
第二招,数字辅助表补全. 性能较好. 计算汇总行,理解稍微复杂.
先增加一个数字辅助表 nums
table(int null)delimiter $$
procedure pCreateNumscnt )
declare s default;
truncate nums while s= intoselect;
set=+;
end;
$$
;
create(intbegin
int 1 table;
insert nums s while s2= intoselect+from;
set=*;
end;
$$
;
初始化数字辅助表
select s,ifnull(c,cc) c
from (
select
when rn is null then '汇总' else '' end s,
t4.c,
if(mod(t3.id,4)!=0 ,when @total=-1 then @total:=t4.c else @total:=@total+t4.c end,@total) cc,
when mod(t3.id,4)=0 then @total:=-1 else null end
from (
select * from nums where id<=
(select (ceil(from t )
) t3
join (
select
when mod(@rn+1,4)=0 then @rn:=@rn+2 else @rn:=@rn+1 end rn ,
t1.* from t t1,(select @rn:=0,@total:=0) vars
) t4 on(t3.id=t4.rn)
) result;
这个理解稍微有点复杂,
第二招改进版本
select when id is null then '汇总' else '' end s,from (
select @id:=@id+1 id, t1.* from t t1,(select @id:=0) vars
) t2
group by ceil(t2.id/3),t2.id with rollup;
以上是“mysql如何实现每隔N行生成一个汇总行”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!