彩票走势图

数据库管理工具Navicat Premium使用教程:如何计算 SQL 中总行的百分比

翻译|行业资讯|编辑:董玉霞|2022-03-09 15:58:04.240|阅读 434 次

概述:在使用过程中,很多时候希望查看一行(或一组行)对总行数的相对贡献,换句话说,一行代表的总计数的百分比。为了显示更清楚,我们查看下面表格,它显示在Navicat Premium最新版本中

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

相关链接:

在使用Navicat Premium过程中,很多时候希望查看一行(或一组行)对总行数的相对贡献,换句话说,一行代表的总计数的百分比。为了显示更清楚,我们查看下面表格,它显示在Navicat Premium最新版本中:

数据库管理工具Navicat Premium使用教程

通过结合 count() 函数和 Group By 子句,我们可以很容易地找出每种水果收到了多少订单:

数据库管理工具Navicat Premium使用教程

那么现在,我们如何查看每种水果的订单占订单总数的百分比?事实上,在 SQL 中计算行百分比有三种标准方法。他们是:

  • 使用 OVER() 子句。
  • 使用子查询。
  • 使用公用表表达式或 CTE。
  • 我们将依次进行探讨。

    OVER() 子句

    OVER 子句主要与窗口函数一起使用,用于确定将查询中的哪些行应用于函数、该函数以什么顺序计算它们以及何时重新开始函数的计算。

    OVER 子句是 SQL 中计算行百分比的最有效方法,因此如果您优先考虑效率,它应该是您的首选。这是获得百分比的公式:

    count(*) * 100.0 / sum(count(*)) over()

    将上述 SQL 添加到我们的原始查询中会产生以下结果:

    Navicat for MySQL在 MySQL 中处理日期和时间

    使用子查询

    并非所有数据库都支持 OVER() 子句,因此子查询方法可能是非常有价值的后备解决方案。它有时被称为“通用解决方案”,因为它适用于所有数据库。这种方法的另一个好处是它也最容易与 Round() 等函数合并。这是我们需要添加到查询中的内容:

    count(*) * 100.0 / (从中选择 count(*))

    这是通用的解决方案:

    Navicat for MySQL在 MySQL 中处理日期和时间

    使用公用表表达式 (CTE)

    With common_table_expression子句指定一个临时命名结果集,称为公用表表达式 (CTE)。然后,我们可以从临时结果集中进行选择,以将更多函数应用于检索到的字段。在我们的例子中,我们可以将 sum() 函数应用于计数以获得百分比:

    Navicat for MySQL在 MySQL 中处理日期和时间

    这种方法效率最低,因为 CTE 基本上针对内部(初始)结果运行第二个查询。话虽如此,有时您可能需要使用 CTE 执行无法一次性轻松完成的额外处理。

    在这篇教程中,我们学习了三种方法来表示一行(或一组行)对总行数的相对贡献百分比。每种方法都有自己的优点和缺点,您可以根据自己的具体要求选择一种。如果想试用Navicat Premium正版,可以在这里下载,14天全功能免费试用。

    Navicat Premium| 下载试用

    Navicat Premium是一个可连接多种数据库的管理工具,它可以让你以单一程序同时连接到MySQL、Oracle及PostgreSQL数据库,让管理不同类型的数据库更加的方便。


    标签:

    本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn


    为你推荐

    • 推荐视频
    • 推荐活动
    • 推荐产品
    • 推荐文章
    • 慧都慧问
    扫码咨询


    添加微信 立即咨询

    电话咨询

    客服热线
    023-68661681

    TOP