在使用过程中,很多时候希望查看一行(或一组行)对总行数的相对贡献,换句话说,一行代表的总计数的百分比。为了显示更清楚,我们查看下面表格,它显示在Navicat Premium最新版本中
在使用Navicat Premium过程中,很多时候希望查看一行(或一组行)对总行数的相对贡献,换句话说,一行代表的总计数的百分比。为了显示更清楚,我们查看下面表格,它显示在
通过结合 count() 函数和 Group By 子句,我们可以很容易地找出每种水果收到了多少订单:
那么现在,我们如何查看每种水果的订单占订单总数的百分比实上,在 SQL 中计算行百分比有三种标准方法。他们是:
我们将依次进行探讨。
OVER() 子句
OVER 子句主要与窗口函数一起使用,用于确定将查询中的哪些行应用于函数、该函数以什么顺序计算它们以及何时重新开始函数的计算。
OVER 子句是 SQL 中计算行百分比的最有效方法,因此如果您优先考虑效率,它应该是您的首选。这是获得百分比的公式:
count(*) * 100.0 / sum(count(*)) over()
将上述 SQL 添加到我们的原始查询中会产生以下结果:
使用子查询
并非所有数据库都支持 OVER() 子句,因此子查询方法可能是非常有价值的后备解决方案。它有时被称为“通用解决方案”,因为它适用于所有数据库。这种方法的另一个好处是它也最容易与 Round() 等函数合并。这是我们需要添加到查询中的内容:
count(*) * 100.0 / (从中选择 count(*))
这是通用的解决方案:
使用公用表表达式 (CTE)
With common_table_expression子句指定一个临时命名结果集,称为公用表表达式 (CTE)。然后,我们可以从临时结果集中进行选择,以将更多函数应用于检索到的字段。在我们的例子中,我们可以将 sum() 函数应用于计数以获得百分比:
这种方法效率最低,因为 CTE 基本上针对内部(初始)结果运行第二个查询。话虽如此,有时您可能需要使用 CTE 执行无法一次性轻松完成的额外处理。
在这篇教程中,我们学习了三种方法来表示一行(或一组行)对总行数的相对贡献百分比。每种方法都有自己的优点和缺点,您可以根据自己的具体要求选择一种。如果想试用Navicat Premium正版,可以在这里下载,14天全功能免费试用。
Navicat Premium| 下载试用
Navicat Premium是一个可连接多种数据库的管理工具,它可以让你以单一程序同时连接到MySQL、Oracle及PostgreSQL数据库,让管理不同类型的数据库更加的方便。
标签:
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!