IT俱乐部 MySql MySQL sum后再计算percentage的多种解决办法

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

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内容请搜索IT俱乐部以前的文章或继续浏览下面的相关文章希望大家以后多多支持IT俱乐部!

本文收集自网络,不代表IT俱乐部立场,转载请注明出处。https://www.2it.club/database/mysql/12004.html
上一篇
下一篇
联系我们

联系我们

在线咨询: QQ交谈

邮箱: 1120393934@qq.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部