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


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

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

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

    • 使用 OVER() 子句
    • 使用子查询
    • 使用公用表表达式,或 CTE

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

    OVER() 子句

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

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

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

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

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

    使用子查询

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

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

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

    使用公用表表达式(CTE)

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

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

    总结

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

    先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦

  • 相关阅读:
    vue-puzzle-vcode完成验证码拖拽
    python jupyter notebook打开页面方便使用
    基于FPGA的图像二值化处理,包括tb测试文件和MATLAB辅助验证
    上云容灾如何实现碳中和-万博智云受邀参加1024程序员节数据技术论坛并发表演讲
    【算法日志】图论 并查集及其简单应用
    node面试题:npm和yarn的区别
    轻量级开源ROS 的机器人设备(2)--设计
    Ansible
    企业电子招投标采购系统——功能模块&功能描述+数字化采购管理 采购招投标
    html css 和 js 如何协同工作的
  • 原文地址:https://blog.csdn.net/Ajekseg/article/details/126081039