当前位置: 代码网 > it编程>数据库>Mysql > MySQL sum后再计算percentage的多种解决办法

MySQL sum后再计算percentage的多种解决办法

2024年06月12日 Mysql 我要评论
over() 函数,最简单的一种以下是sql片段,在外面嵌套一个select是因为over 不会sql语句所有的data sum,而不是 limit 之后的数据,所以需要先limit 在over()s

over() 函数,最简单的一种

以下是sql片段,在外面嵌套一个select是因为over 不会sql语句所有的data sum,而不是 limit 之后的数据,所以需要先limit 在over()

		select 
		b.*,
		round(b.amount*100 / sum(b.amount) over(),2) as inv_salesshare
		from (	
				select
					cm_cust_no,
					cm_co_name,
					sum ( amount ) as amount 
				from

cross join

通过cross join 把total 作为一个结果集并到sum的sql,然后通过除法计算percentage。

 select 
     p.personid, sum(pa.total)
     sum(pa.total) * 100 / [p] as 'percentage'
 from 
     person p
 join 
     package pa on p.personid = pa.packagefk
 cross join 
     (select sum(pa.[total]) as [p] 
      from package pa) t
 group by 
     p.personid

通过两个select 嵌套查询

这种方法适合简单case,如果条件复杂时,第二个select就会臃肿,比如 增加 时间条件、group,limit等。

select pa.personid, sum(pa.total),
       sum(pa.total) * 100.0 / (select sum(pa.total) from pa)
from package pa
group by pa.personid;

通过with 函数处理

此方法简单,分块处理,一些复杂的sql可以考虑使用with方法处理。

有时间验证下

;with persontotals as
(
  select p.personid, sum(cast(pa.total as money)) total
  from person p
  join package pa on p.personid = pa.packagefk
  group by p.personid
),
grandtotal as
(
  select sum(pt.total) total
  from persontotals pt
)
select pt.*, (pt.total / nullif((select total from grandtotal),0)) * 100 percentage
from persontotals pt

到此这篇关于mysql sum后再计算percentage的多种解决办法的文章就介绍到这了,更多相关mysql计算percentage内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com