美文网首页Navicat 官方账号PL/SQL
在 SQL 中计算总行数的百分比

在 SQL 中计算总行数的百分比

作者: Navicat | 来源:发表于2022-05-12 13:47 被阅读0次

很多时候,你会希望知道一行(或一组行)在总行数所占的比重。换句话说,即是一行占总计数的百分比是多少。为了说明这一点,让我们看看以下显示在Navicat Premium 16中的表:

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

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

- 使用 OVER() 子句

- 使用子查询

- 使用公用表表达式,或CTE

本文的其余部分将依次探讨其中的每一种。

OVER() 子句

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

OVER 子句是 SQL 中计算行百分比的最有效方法,因此如果你最着重效率,它应该是你的首选。以下是获得百分比的公式:

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

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

看起来不错,但稍微四舍五入也没什么坏处。不幸的是,使用 over() 子句并不容易做到这一点。也许下一个选项会更适合你。

使用子查询

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

count(*) * 100.0 / (select count(*) from )

以下是实行的通用解决方案:

使用公用表表达式(CTE)

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

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

总结

在这篇文章中,我们学习了三种方法来表示一行(或一组行)在总行数所占的比重。每种方法都有自己的优点和缺点,因此你必须根据自己的具体要求选择。如果你想试用 Navicat 16,可以在这里下载 Navicat 的 14 天全功能免费试用版。

相关文章

  • 在 SQL 中计算总行数的百分比

    很多时候,你会希望知道一行(或一组行)在总行数所占的比重。换句话说,即是一行占总计数的百分比是多少。为了说明这一点...

  • iOS开发常见问题-计算总行数\总页数

    计算总行数\总页数

  • iOS-计算行数和列数

    有时候项目中需要计算行数和指定元素的列数,计算如下 计算行数:x = 总个数y = 一行的个数行数 = ((x -...

  • 第三章 SQL聚合函数 COUNT(一)

    第三章 SQL聚合函数 COUNT(一) 返回表或指定列中的行数的聚合函数。 大纲 参数 * - 指定应计算所有行...

  • 2020-01-10 sql的聚合与排序

    计算表中的行数(包含null) select count(*) from <表名>; 计算null之外的行数 se...

  • Oracle操作符,函数

    SQL 操作符 Oracle 支持的 SQL 操作符分类如下: 操作符介绍(一) 算术操作符 用于执行数值计算 可...

  • View所显示的百分比

    前言 在开发中,遇到了计算View显示的百分比来表明是否曝光主要的场景就是在滑动列表中View展示的百分比。 RX...

  • 20-Sqoop

    Sqoop: SQL to Hadoop 场景:数据在RDBMS中,我们如何使用Hive或者Hadoop来进行数据...

  • oracle初步

    1.安装完成后,SQL-Plus进行命令控制以及查询,SQL-Developer进行数据库可视化控制.首先开启计算...

  • mysql使用聚合函数查询

    用来对数据进行总结 1、COUNT()函数 COUNT(*)计算表中总的行数,不管某列有数值或者为空值。 COUN...

网友评论

    本文标题:在 SQL 中计算总行数的百分比

    本文链接:https://www.haomeiwen.com/subject/zdwsurtx.html