SQL聚合函数功能和用法解析

SQL聚合函数功能和用法解析第一部分:介绍SUM和AVG  我们知道数据库通常包含大量数据,要从海量的数据中找到我们需要的某条记录无异于大海捞针,不过通过SQL语言我们可以找到很多方法从数据库中提取我们要查找的特定数据,就是通过这些方法我们才能找到“列举出七八两个月中购买了西伯利亚羊毛的所有顾客的姓名”这类问题的答案。  很多时候,我们还希望能够通过对数据进行分析,总结出规律和趋势或生成高水平的报表。例如,对于采购经理来说,…

大家好,又见面了,我是你们的朋友全栈君。第一部分:介绍SUM和
AV
G

  我们知道数据库通常包含大量数据,要从海量的数据中找到我们需要的某条记录无异于大海捞针,不过通过SQL语言我们可以找到很多方法从数据库中提取我们要查找的特定数据,就是通过这些方法我们才能找到“列举出七八两个月中购买了西伯利亚羊毛的所有顾客的姓名”这类问题的答案。

  很多时候,我们还希望能够通过对数据进行分析,总结出规律和趋势或生成高水平的报表。例如,对于采购经理来说,他可能对所有销售出去的产品清单不感兴趣,而只是想要知道这个月产品的销售量。SQL提供了聚合函数(aggregate functions)功能来支持对大量数据进行总结的操作。本文我们将具体来看看这些函数的功能和用法,包括添加数据和计算平均值的函数、对符合特定标准的记录进行计数的函数,以及找出表中最大值和最小值的函数。

  我们将使用下文所示的ProductOrder表来执行我们所有的查询。注意,这个表并没有标准化,而是将几个数据实体联合到一个表中,这样做是为了简化条件方便说明。如果要设计较好的关系数据库,应当把这些内容至少分成三个关联表Products、Orders和Customers。

订单号

 

 

客户名

 

客户姓

 

数量

 

单价

 

所在地

 

122

 

John

 

Jacob

 

21

 

4.52

 

北美洲

 

923

 

Ralph

 

Wiggum

 

192

 

3.99

 

北美洲

 

238

 

Ryan

 

Johnson

 

87

 

4.49

 

非洲

 

829

 

Mary

 

Smith

 

842

 

2.99

 

北美洲

 

824

 

Elizabeth

 

Marks

 

48

 

3.48

 

非洲

 

753

 

James

 

Linea

 

9

 

7.85

 

北美洲

 

942

 

Alan

 

Jonas

 

638

 

3.29

 

欧洲

 

        我们先从SUM函数开始。这个函数通常在SELECT语句中使用,返回系列值的总数。假设产品项目经理想了解目前为止商品的总销售额,那么我们可以使用以下的查询脚本:

SELECT SUM(数量) AS 总数 
  FROM ProductOrders 
  执行语句将返回以下结果: 
  Total 
  ———– 
  1837
  AVG函数(平均函数)使用方法和SUM类似,它给我们提供系列值的算术平均数。这次我们可以尝试稍微复杂点的任务:找出北美洲大陆所有订单的金额平均值。注意,我们需要将“数量”列和“单价”列相乘计算出每张订单的金额总数。查询脚本如下:
SELECT AVG(单价* 数量) As 平均金额 
FROM ProductOrders 
WHERE 所在地 = “北美洲”
    返回结果如下:
平均金额 
——————— 
862.3075

 

在本文第二部分,我们将探讨计算满足设定标准的记录数量的方法。

  第二部分:COUNT计数函数

  SQL提供了COUNT函数来查询满足设定标准的记录的数量。我们可以使用单独COUNT(*)语法来检索一个表内的行数。此外,还可以利用WHERE子句来设置计数条件,返回特定记录的条数。例如,假设我们的产品销售经理想了解公司处理了多少张要求购买100个以上产品的订单。下面是满足这个条件的SQL查询脚本:

SELECT COUNT(*) AS ‘大订单数量’
FROM ProductOrders
WHERE 数量> 100
    返回结果如下: 
大订单数量 
———————- 
3

  COUNT函数还允许使用 DISTINCT关键字和表达式来计算满足表达式的值在目标数据中出现的数量。同样地,还可以使用ALL关键字来返回满足表达式的值的全部数量,不管其中有没有重复值。例如,产品经理想通过一个简单查询返回数据库中“所在地”的数量。

  首先我们来看看使用ALL关键字的查询:

SELECT COUNT(ALL 所在地 ) As ‘ 所在地数量 
FROM ProductOrders

 

 

    返回的结果为:

 

 

所在地数量  
——————– 
7

 

 

  显然这不是我们需要的结果。因为根据ProductOrders表所示,所有订单的所在地只有三个,分别是北美洲、非洲、欧洲。下面让我们来用DISTINCT关键字来代替看看: 
  

SELECT COUNT(DISTINCT 所在地) As ‘所在地数量’
FROM ProductOrders 
    返回的结果为:
所在地数量
——————– 
3

  这才是我们想要的结果。

  在本文的第三部分,我们将介绍如何利用函数来查找目标集中的最大值和最小值。

  第三部分:最大值和最小值

  在本文的最后一节,我们来看看SQL为我们提供用来查找满足给定表达式的最大值和最小值的函数。MAX()函数返回给定数据集中的最大值。我们可以给该函数一个字段名称来返回表中给定字段的最大值。还可以在MAX()函数中使用表达式和GROUP BY从句来加强查找功能。

  还是ProductOrders表,假设我们的产品经理想要从这个数据库中找到给公司带来最多收入的那份订单。我们可以使用以下查询来找到这张订单,并返回该订单的销售总金额:

SELECT MAX(数量 * 单价)As ‘最大的订单’ 
  FROM ProductOrders 
  返回结果如下: 
  最大的订单 
  ——————— 
  2517.58

  MIN()函数的用法类似,但返回表达式的最小值。让我们用MIN()函数来尝试稍微复杂一点的查询。我们的销售部门目前正在分析小订单的数据。他们想要查询每个所在地的最小订单。这除了要在表达式中计算值外,还需要用到GROUP BY从句来总结所在地的数据。SQL查询如下:

SELECT 
所在地 
, MIN( 
数量 

单价 
) AS ‘ 
最小订单 

FROM ProductOrders 
GROUP BY 

所在地

 

 

    
返回结果如下:

 

 

所在地 
     
最小订单 

————- ——————— 

非洲 
        167.04

欧洲 
       2099.02

北美洲 
   70.65

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/151845.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java IO流处理 面试题汇总

    Java IO流处理 面试题汇总说明:本节内容来源于网络汇总输入输出流是相对于内存而言的!1、面试题汇总(1)java中有几种类型的流?字符流和字节流。字节流继承inputStream和OutputStream,字符流继承自InputSteamReader和OutputStreamWriter。(2)谈谈JavaIO里面的常见类,字节流,字符流、接口、实现类、方法阻塞答:输入流就…

    2022年6月14日
    24
  • ROS中使用A星算法进行路径规划[通俗易懂]

    ROS中使用A星算法进行路径规划[通俗易懂]ROS中使用A星算法进行路径规划前言python编写A星算法描述具体实现ROS结合A星算法描述具体实现实现结果前言由于本人这学期修了一门《智能工程》的课程,课程的大作业要求大家自主编写机器人导航程序,包括:路径规划、轨迹规划、控制器、机器人建模等相关程序,因此特在此写下一篇博客,记录开发过程。这是第一篇博客,用于记录如何将自己编写的A星算法用于ROS中。python编写A星算法描述先声…

    2022年10月6日
    0
  • Pycharm如何提交代码至github仓库配置操作步骤[通俗易懂]

    Pycharm如何提交代码至github仓库配置操作步骤[通俗易懂]需求:同Eclipse解决提交代码至github仓库初衷一致详细操作步骤如下:github创建准备提交的git地址:https://github.com/xxxxxxx/test.git打开pycharm,File–>settings–VersionControl–Github配置账户密码,根据习惯选择认证方式:创建demo项目,pycharm工具条选择VCS,右键选择共享项目…

    2022年8月29日
    0
  • pycharm汉化教程(碧蓝幻想汉化插件安装)

    PyCharm官方汉化插件看到很多萌新还在找Pycharm的中文版,其实七月份官方就出了汉化插件,已经不再需要这类补丁了方法如下打开Pycharm的设置打开设置中的插件搜索Chinese安装汉化插件点击应用即可最近更新插件后,最新的官方汉化插件会不能用提示Plugin”Chinese(Simplified)LanguagePackEAP”wasnotinstalled:Cannotdownload’https://.

    2022年4月15日
    216
  • lvm扩容是否影响oracle,LVM实战案例之LVM扩容

    lvm扩容是否影响oracle,LVM实战案例之LVM扩容接上所写二、LVM扩容(本次扩容需要对pv,vg,lv等进行扩容)需求分析:/ora01需要扩容5G(1)查看所需扩容的/ora01的空间情况[root@db01test]#df-hFilesystemSizeUsedAvailUse%Mountedon/dev/sda345G4.4G…

    2022年6月20日
    37
  • SIGPIPE信号的产生及处理

    SIGPIPE信号的产生及处理SIGPIPE信号的产生在tcp四次挥手过程中,发送方向已经调用close()方法的socket一端写数据,会产生sigpipe错误。close():关闭读写两个方向,会导致sigpipe信号shutdown():可以选择关闭读/写方向,不会导致sigpipe信号SIGPIPE信号的解决方法直接忽略sigpipe信号voidhandle_for_sigpipe(){str…

    2022年7月17日
    16

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号