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如何实现事务隔离

    浅析MySQL如何实现事务隔离

    使用过关系型数据库的,应该都事务的概念有所了解,知道事务有 ACID 四个基本属性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability),今天我们主要来理解一下事务的隔离性
    2021-06-06
  • MySQL行锁、间隙锁和临键锁示例详解

    MySQL行锁、间隙锁和临键锁示例详解

    InnoDB存储引擎通过行锁、间隙锁和临键锁实现MVCC和基于锁的并发控制,确保事务隔离级别和避免死锁,本文给大家介绍MySQL行锁、间隙锁和临键锁,感兴趣的朋友跟随小编一起看看吧
    2025-11-11
  • Mysql8创建用户及赋权操作实战记录

    Mysql8创建用户及赋权操作实战记录

    一般在开发中,我们需要新建一个账户,并赋予某个数据库的访问权限,下面这篇文章主要给大家介绍了关于Mysql8创建用户及赋权操作的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • MySQL中的常用函数及用法总结

    MySQL中的常用函数及用法总结

    MySQL是一种常用的关系型数据库管理系统,它提供了许多内置函数来处理数据,本文将介绍MySQL中的各种常用函数,包括字符串函数、日期函数、数学函数、聚合函数等,需要的朋友可以参考下
    2023-06-06
  • MySQL 数据库中数据表超详细的基本操作

    MySQL 数据库中数据表超详细的基本操作

    这篇文章主要介绍了MySQL 数据库中数据表的基本操作,下面文章会从创建表的基本语法伊利举例说明概括全篇数据表的基本操作详情,需要的小伙伴可以参考一下文章的具体内容,希望对你有所帮助
    2021-12-12
  • MySQL索引与视图详解

    MySQL索引与视图详解

    MySQL中的索引类似于书籍的目录,用于提高数据查询效率,视图是一种虚拟表,可以提高数据的安全性,并简化查询语句,索引可以提高查询效率,但会占用磁盘空间,视图可以保障数据的安全性,隐藏底层列名,并提供逻辑数据独立性,感兴趣的朋友跟随小编一起看看吧
    2025-12-12
  • RedHat8安装mysql9.1的详细过程

    RedHat8安装mysql9.1的详细过程

    文章主要介绍了如何下载和安装MySQL Enterprise Edition,包括下载地址、安装顺序、启动服务、修改密码等步骤,同时,还提到了JDBC的下载地址以及解决Red Hat 8源问题的方法,感兴趣的朋友跟随小编一起看看吧
    2024-11-11
  • Mysql子查询IN中使用LIMIT应用示例

    Mysql子查询IN中使用LIMIT应用示例

    有3张表,infor信息表,mconfig物料配置表,maaply物料申请表,要求是读出申请表中哪些人申请哪些物料,接下来为大家介绍下Mysql子查询IN中使用LIMIT
    2014-01-01
  • MySql如何使用not in实现优化

    MySql如何使用not in实现优化

    这篇文章主要介绍了MySql如何使用not in实现优化,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • SQL- join多表关联问题

    SQL- join多表关联问题

    这篇文章主要介绍了SQL- join多表关联问题,具有很好的参考价值,希望对大家有所帮助。
    2022-12-12

最新评论