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


相关推荐

  • [LeetCode] Top K Frequent Elements 前K个高频元素

    [LeetCode] Top K Frequent Elements 前K个高频元素

    2022年3月12日
    42
  • C#UDP编程

    C#UDP编程一.UDP协议UDP(UserDatagramProtocol)协议就是“用户数据报协议”,它是一种无连接的协议,无连接主要是和TCP协议相比较的。我们知道当利用TCP协议传送数据的时候,首先必须建立连接(也就是所谓的握手)才可以传输数据。而当计算机利用UDP协议进行数据传输的时候,发送方只需要知道对方的IP地址和端口号就可以发送数据,而并不需要进行连接。由于UDP协议并不需要进行确定

    2025年10月4日
    2
  • php一键安装的环境包,php环境搭建的一键安装包有哪些?

    php一键安装的环境包,php环境搭建的一键安装包有哪些?php 环境搭建的一键安装包有 1 XAMPP 是一款功能强大的一键安装环境 2 PhpStudy 是支持 Win10 并且对于 PHP7 的支持也是不错 3 Appserv 是一款在 Windows 下的 PHP 一键安装环境 php 环境搭建的一键安装包有 1 XAMPPXAMPP 是一款功能强大的一键安装环境 它可以在 Windows Linux Solaris MacOSX 环境下进行安装对于 FTP 等常用操作也进

    2025年6月2日
    2
  • 实型变量_C语言实型常数的合法形式

    实型变量_C语言实型常数的合法形式实型变量分为两类:单精度型和双精度型,其类型说明符为float单精度说明符,double双精度说明符。在TurboC中单精度型占4个字节(32位)内存空间,其数值范围为3.4E-38~3.4E+38,只能提供七位有效数字。双精度型占8个字节(64位)内存空间,其数值范围为1.7E-308~1.7E+308,可提供16位有效数字。实型变量说明的格式和书写规则与整型相同。例如:f

    2025年8月25日
    0
  • javaScript的基本语法结构「建议收藏」

    javaScript的基本语法结构「建议收藏」javaScript的基本语法结构一、javascript程序带的文本二、javascript中的注释三、字面量四、标识符和保留字标识符保留字五:可选的分号一、javascript程序带的文本vascript区分大小写。这就意味着他的关键字,变量,函数名和其他标识符必须始终保持一致的大小写格式二、javascript中的注释//这是单行注释/*这也是注释*///而这是另一个注释/**这是多行注释*每行开头的*字符不是必要的,只是为了美观*/三、字面量字面量(litera

    2022年10月9日
    3
  • JAVA位移运算「建议收藏」

    JAVA位移运算「建议收藏」1、java将负整数转成二进制这里以8位为例,只是为了表明过程,实际中java的int类型是4byte,也就是32位。二进制的首位是符号位,0表示正数,1表示负数,在java中,会对负数进行取反加一操作,进而计算出实际的十进制值。如10101010,此8位的二进制数首位是1,表示负数,所以对后面的七位进行取反加一操作,即0101010–>1010110,换成十进制的数就是86,再加上首位的1表示负数,结果就是-86。2、位移运算1)正数的右移:如10>>2,左边自动补0,右边移出

    2025年5月28日
    2

发表回复

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

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