小编给大家分享一下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行生成一个汇总行”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联-成都网站建设公司行业资讯频道!
名称栏目:mysql如何实现每隔N行生成一个汇总行-创新互联
文章位置:http://www.cqwzjz.cn/article/eoipo.html

 建站
建站
 咨询
咨询 售后
售后
 建站咨询
建站咨询 
 