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

 更新时间:2024年06月03日 08:20:41   作者:MyFreeIT  
这篇文章主要介绍了MySQL sum后再计算percentage的多种解决办法,over() 函数,Cross Join,Select 嵌套查询以及 with 函数处理,文中通过代码示例讲解的非常详细,需要的朋友可以参考下

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

相关文章

  • mysql 8.0.18 安装配置方法图文教程

    mysql 8.0.18 安装配置方法图文教程

    这篇文章主要为大家详细介绍了mysql 8.0.18 安装配置方法图文教程,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10
  • MySQL的主键命名策略相关

    MySQL的主键命名策略相关

    这篇文章主要介绍了MySQL的主键命名策略的的相关资料,帮助大家更好的理解和使用MySQL数据库,感兴趣的朋友可以了解下
    2021-01-01
  • mysql排序失效问题的解决

    mysql排序失效问题的解决

    本文主要介绍了mysql排序失效问题的解决,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • php中关于mysqli和mysql区别的一些知识点分析

    php中关于mysqli和mysql区别的一些知识点分析

    看书、看视频的时候一直没有搞懂mysqli和mysql到底有什么区别。于是今晚“谷歌”一番,整理一下。需要的朋友可以参考下。
    2011-08-08
  • CentOS 7下使用rpm包安装mysql 5.7.18

    CentOS 7下使用rpm包安装mysql 5.7.18

    这篇文章主要为大家详细介绍了CentOS 7下使用rpm包安装mysql 5.7.18的教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • MySQL计算两个日期相差的天数、月数、年数

    MySQL计算两个日期相差的天数、月数、年数

    这篇文章主要介绍了MySQL计算两个日期相差的天数、月数、年数,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08
  • linux下mysql数据库单向同步配置方法分享

    linux下mysql数据库单向同步配置方法分享

    mysql数据库单向同步又叫做主从复制,是通过二进制日志文件完成的,注意:mysql 数据库的版本,两个数据库版本要相同
    2012-06-06
  • MySQL数据库用户权限管理

    MySQL数据库用户权限管理

    这篇文章主要介绍了MySQL数据库用户权限管理,文章主要内容就是在不同的项目中,给不同的角色(开发者)不同的操作权限,保证数据库数据的安全,需要的朋友可以参考一下
    2022-06-06
  • MySQL数据库优化之索引实现原理与用法分析

    MySQL数据库优化之索引实现原理与用法分析

    这篇文章主要介绍了MySQL数据库优化之索引实现原理与用法,结合实例形式分析了mysql数据库优化操作的索引原理、具体实现与相关操作注意事项,需要的朋友可以参考下
    2020-01-01
  • MySQL性能优化

    MySQL性能优化

    MySQL是目前使用最多的开源数据库,但是MySQL数据库的默认设置性能非常的差,仅仅是一个玩具数据库。因此在产品中使用MySQL数据库必须进行必要的优化
    2013-02-02

最新评论