mysql如何实现每隔N行生成一个汇总行

45次阅读
没有评论

共计 1427 个字符,预计需要花费 4 分钟才能阅读完成。

丸趣 TV 小编给大家分享一下 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 行生成一个汇总行”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注丸趣 TV 行业资讯频道!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-26发表,共计1427字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)