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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • springboot框架流程图_java流程框架

    springboot框架流程图_java流程框架这篇介绍springboot的框架流程控制(Controller)层,负责具体的业务模块流程的控制,也就是去拦截客户发来的请求。然后服务(Service)层,负责业务模块的逻辑应用设计,调用DAO层已定义的接口,去实现Service具体的实现类,也就是去和数据库(DAO)层打交道。Dao(serviceImpl)层负责与数据库进行交互设计,用来处理数据的持久化工作,DAO层的数据源配置,以及有关数据库连接的参数都在Spring的配置文件中进行配置。最后一层View层,负责前台h

    2022年8月21日
  • TensorFlow实现遗传算法_unity opencv

    TensorFlow实现遗传算法_unity opencv一、VGGNet简介VGGNet是牛津大学计算机视觉组和GoogleDeepMind公司的研究员一起研发的深度卷积神经网络。VGGNet探索了卷积神经网络的深度与其性能之间的关系,通过反复堆叠的小型卷积核和的最大池化层,VGGNet成功地构造了16~19层深的卷积神经网络。VGGNet的错误率大幅下降,取得了ILSVRC2014比赛分类项目的第2名和定位项目的第1名。同时,VGGNet的拓…

    2022年8月30日
  • c语言random函数在vc,C++ 中随机函数random函数的使用方法

    c语言random函数在vc,C++ 中随机函数random函数的使用方法C++中随机函数random函数的使用方法一、random函数不是ANSIC标准,不能在gcc,vc等编译器下编译通过。可改用C++下的rand函数来实现。1、C++标准函数库提供一随机数生成器rand,返回0-RAND_MAX之间均匀分布的伪随机整数。RAND_MAX必须至少为32767。rand()函数不接受参数,默认以1为种子(即起始值)。随机数生成器总是以相同的种子开始,所以形成…

    2022年6月4日
  • Mysql 慢查询优化实践

    Mysql 慢查询优化实践

    2021年6月29日
  • 取出字符串中数字的最大值

    取出字符串中数字的最大值取出字符串中数字的最大值

    2022年4月24日
  • CSS横向菜单

    CSS横向菜单

    2021年8月20日

发表回复

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

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