很多时候,你会希望知道一行(或一组行)在总行数所占的比重。换句话说,即是一行占总计数的百分比是多少。为了说明这一点,让我们看看以下显示在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 <YourTable>)

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

使用公用表表达式(CTE)

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

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

总结

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

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

在 SQL 中计算总行数的百分比相关推荐

  1. pandas中计算分位数的方法describe,quantile,以及sql中计算分位数的方法percentile_approx,percent_rank() over()

    1.pandas中计算分位数的方法describe,quantile 准备一张表 def test():df = pd.DataFrame({'a':[1,2,3],'b':[4,5,6],'c':[ ...

  2. 在 SQL 中计算分页元数据,无需额外的往返

    在 SQL 中对结果进行分页时,我们使用标准 SQL或供应商特定的版本,例如.例如:OFFSET .. FETCHLIMIT .. OFFSET SELECT first_name, last_nam ...

  3. oracle 偶数与奇数,在PL / SQL中计算数字中的奇数和偶数

    我们给定一个正整数数字,任务是使用PL / SQL计算数字中奇数和偶数的计数. PL / SQL是SQL与编程语言的过程功能的组合.它是由Oracle Corporation在90年代初开发的,目的是 ...

  4. SQL老司机,在SQL中计算 array map json数据

    2019独角兽企业重金招聘Python工程师标准>>> 摘要: 场景 通常,我们处理数据,一列数据类型要么是字符串,要么是数字,这些都是primitive类型的数据. 场景 通常,我 ...

  5. sql PERCENTILE_CONT 计算一组数的线性差值

    使用线性插值计算 value_expression 的指定百分位值. 如果不存在 RESPECT NULLS,此函数会忽略 NULL 值.如果存在 RESPECT NULLS: 两个 NULL 值之间 ...

  6. PHP 计算两数的百分比

    一.计算数量与总数之间相差百分之多少. 1.先用数量减掉总数. 2.数量除总数再乘100:得出%结果. <?php$total = 150;//总数$num = 50;//数量$num = $n ...

  7. java运行内存计算_java计算金额是放在内存中计算还是在sql中计算好呢?

    严格来说,数据库上的金额这个字段根本就不应该被直接set. 为什么这么说呢,因为在这个操作完成以后,实际上数据库要承载的信息被丢失了,丢失了那一部分呢?丢失了修改前的数值,而且是永久丢失了,再也找不回 ...

  8. sql中计算两个日期之间相差的时间粒度—TIMESTAMPDIFF函数

    TIMESTAMPDIFF(时间粒度,开始时间,结束时间):计算开始时间和结束时间相差的(天数.小时数.分钟数.秒数等等),结果会取整** 时间粒度参数有: 1. year:计算开始时间和结束时间相差 ...

  9. Java统计文件夹中文件总行数

    本就想统计下我高三搞OI时写了多少行代码,最近学Java学了IO流,加上上次写的遍历文件夹,就能写个程序统计了o(∩_∩)o //By LYLtimimport java.io.BufferedRea ...

最新文章

  1. 分布式查询的使用准则
  2. robots.txt网站爬虫文件设置
  3. Git 笔记:基本操作工作流程
  4. CTF——angr使用学习记录
  5. w7下如何安装linux双系统,ubuntu安装教程(下): 教你装win7+Ubuntu双系统
  6. Kafka学习之二 Kafka安装和使用
  7. 美国签证过不了,ICLR 2020搬到埃塞俄比亚,同性恋学者:不去,保命要紧
  8. Web前端开发需要掌握的技术有哪些?
  9. 读书-算法《程序设计导引及在线实践》-简单计算题2:棋盘上的距离
  10. 怎么仿站下载整站的文件
  11. 使用C#将RGB24转换为YUV420格式
  12. python xlwt_Python模块xlwt对excel进行写入操作
  13. 复联3观影指南丨漫威宇宙里的AI黑科技
  14. Numpy中take的用法
  15. 华为设备IPsec简单配置
  16. 手把手教你最近很火的 微信公众号测试号推送消息
  17. RPA 软件技术是什么意思
  18. layui 数据表格的搜索分页功能的实现
  19. Linux如何关闭防火墙?
  20. 百度小程序命中搜索算法的常见问题(官方解读)

热门文章

  1. swift UI 学习 (一)
  2. Office2016只安装三件套方法(word,ppt,excel)另附安装visio2016安装教程
  3. 壮大云平台中国力量 安全可控大会即将登场
  4. Hadoop常见问题 | 用浏览器访问namenode的50070端口不正常,如何解决?
  5. 个人号微信二次开发,微信ipad协议
  6. 计算机配件地区限制,原来电脑配件包含这么多信息,不懂可以看看!以后再也不怕被坑...
  7. 什么是P=NP问题?
  8. 不仅仅是Google,您必须知道的全球十大地图API
  9. Frame-Pannel-Button综合
  10. Nolan的分形分布估计软件Stable使用教程