>>与软件开发有关的知识:操作系统,数据库,网络通信等 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 20694 个阅读者 刷新本主题
 * 贴子主题:  MySQL的聚集函数 回复文章 点赞(0)  收藏  
作者:flybird    发表时间:2020-01-28 23:36:21     消息  查看  搜索  好友  邮件  复制  引用

                          

聚集函数

我们经常需要汇总数据而不用把它们实际检索出来,为此MySQL提

供了专门的函数。使用这些函数,MySQL查询可用于检索数据,以便分

析和报表生成。这种类型的检索例子有以下几种。
  • 确定表中行数(或者满足某个条件或包含某个特定值的行数)。
  • 获得表中行组的和。
  • 找出表列(或所有行或某些特定的行)的最大值、最小值和平均

    值。

    上述例子都需要对表中数据(而不是实际数据本身)汇总。因此,

    返回实际表数据是对时间和处理资源的一种浪费(更不用说带宽了)。重

    复一遍,实际想要的是汇总信息。

    为方便这种类型的检索,MySQL给出了5个聚集函数,见表12-1。

    这些函数能进行上述罗列的检索
聚集函数(aggregate function) 运行在行组上,计算和返回单

个值的函数。

点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小

AVG()函数

AVG() 通过对表中行数计数并计算特定列值之和,求得该列的平均

值。 AVG() 可用来返回所有列的平均值,也可以用来返回特定列或行的平

均值。

     点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小

     AVG() 也可以用来确定特定列或行的平均值

     点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小

这条 SELECT 语句与前一条的不同之处在于它包含了 WHERE 子

句。此 WHERE 子句仅过滤出 vend_id 为 1003 的产品,因此

avg_price 中返回的值只是该供应商的产品的平均值

     只用于单个列 AVG() 只能用来确定特定数值列的平均值,而

且列名必须作为函数参数给出。为了获得多个列的平均值,

必须使用多个 AVG() 函数

NULL 值 AVG() 函数忽略列值为 NULL 的行

COUNT()函数

COUNT() 函数进行计数。可利用 COUNT() 确定表中行的数目或符合特

定条件的行的数目。

COUNT() 函数有两种使用方式。
  • 使用 COUNT(*) 对表中行的数目进行计数,不管表列中包含的是空

    值( NULL )还是非空值。
  • 使用 COUNT(column) 对特定列中具有值的行进行计数,忽略

    NULL 值。
下面的例子返回 customers 表中客户的总数

     点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小

     下面的例子只对具有电子邮件地址的客户计数

点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小

     这条 SELECT 语句使用 COUNT(cust_email) 对 cust_email 列

中有值的行进行计数。在此例子中, cust_email 的计数为 3 (表

示5个客户中只有3个客户有电子邮件地址)

     NULL 值 如果指定列名,则指定列的值为空的行被 COUNT()

函数忽略,但如果 COUNT() 函数中用的是星号( * ),则不忽


MAX()函数

MAX() 返回指定列中的最大值。 MAX() 要求指定列名

     点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小

     对非数值数据使用 MAX() 虽然 MAX() 一般用来找出最大的

数值或日期值,但MySQL允许将它用来返回任意列中的最大

值,包括返回文本列中的最大值。在用于文本数据时,如果数

据按相应的列排序,则 MAX() 返回最后一行

     NULL 值 MAX() 函数忽略列值为 NULL 的行。

MIN()函数

MIN() 的功能正好与 MAX() 功能相反,它返回指定列的最小值。与

MAX() 一样, MIN() 要求指定列名

     对非数值数据使用 MIN() MIN() 函数与 MAX() 函数类似,

MySQL允许将它用来返回任意列中的最小值,包括返回文本

列中的最小值。在用于文本数据时,如果数据按相应的列排序,

则 MIN() 返回最前面的行

     NULL 值 MIN() 函数忽略列值为 NULL 的行

SUM()函数

SUM() 用来返回指定列值的和(总计)。

下面举一个例子, orderitems表 包含订单中实际的物品,每个物品

有相应的数量( quantity )。可如下检索所订购物品的总数(所有

quantity 值之和):

点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小

     函数 SUM(quantity) 返回订单中所有物品数量之和, WHERE 子

句保证只统计某个物品订单中的物品

     SUM() 也可以用来合计计算值。在下面的例子中,合计每项物品的

item_price*quantity ,得出总的订单金额

     点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小

     函数 SUM(item_price*quantity) 返回订单中所有物品价钱

之和, WHERE 子句同样保证只统计某个物品订单中的物品

     在多个列上进行计算 如本例所示,利用标准的算术操作符,

所有聚集函数都可用来执行多个列上的计算

NULL 值 SUM() 函数忽略列值为 NULL 的行。

聚集不同值

MySQL 5 及 后 期 版 本 下 面 将 要 介 绍 的 聚 集 函 数 的

DISTINCT 的使用,已经被添加到MySQL 5.0.3中。下面所述

内容在MySQL 4.x中不能正常运行

     以上5个聚集函数都可以如下使用:
  • 对所有的行执行计算,指定 ALL 参数或不给参数(因为 ALL 是默认

    行为);
  • 只包含不同的值,指定 DISTINCT 参数。
ALL 为默认 ALL 参数不需要指定,因为它是默认行为。如果

不指定 DISTINCT ,则假定为 ALL

     下面的例子使用 AVG() 函数返回特定供应商提供的产品的平均价格。

它与上面的 SELECT 语句相同,但使用了 DISTINCT 参数,因此平均值只

考虑各个不同的价格

     点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小

     注意 如果指定列名,则 DISTINCT 只能用于 COUNT() 。 DISTINCT

不能用于 COUNT(*),因此不允许使用COUNT(DISTINCT),

否则会产生错误 。类似地, DISTINCT 必须使用列名,不能用

于计算或表达式

     将 DISTINCT 用于 MIN() 和 MAX() 虽然 DISTINCT 从技术上可

用于 MIN() 和 MAX() ,但这样做实际上没有价值。一个列中的

最小值和最大值不管是否包含不同值都是相同的

组合聚集函数

目前为止的所有聚集函数例子都只涉及单个函数。但实际上 SELECT

语句可根据需要包含多个聚集函数。请看下面的例子:

     点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小

     取别名 在指定别名以包含某个聚集函数的结果时,不应该使

用表中实际的列名。虽然这样做并非不合法,但使用唯一的名

字会使你的SQL更易于理解和使用(以及将来容易排除故障)

     聚集函数用来汇总数据。MySQL支持一系列聚集函数,可以用多种

方法使用它们以返回所需的结果。这些函数是高效设计的, 它们返回结

果一般比你在自己的客户机应用程序中计算要快得多

        
----------------------------
原文链接:https://www.cnblogs.com/ygjzs/p/12230229.html

程序猿的技术大观园:www.javathinker.net



[这个贴子最后由 flybird 在 2020-01-28 23:36:21 重新编辑]
  Java面向对象编程-->类的生命周期
  JavaWeb开发-->使用Session(Ⅰ)
  JSP与Hibernate开发-->映射一对多关联关系
  Java网络编程-->RMI框架
  精通Spring-->计算属性和数据监听
  Vue3开发-->Vue简介
  实战:上亿数据如何秒查
  神奇的 SQL 之 联表细节 → MySQL JOIN 的执行过程
  SQL查询语句练习题
  SaltStack 自动化运维实战
  没有宫廷内斗,数据库界的延禧攻略
  作为一个程序员,CPU的这些硬核知识你必须会!
  MySQL 删除数据库
  SQL的数学函数
  SQL CHECK 约束
  比较XML的子元素和属性
  Mysql提升效率的神器: 索引
  数据库设计(一)——数据库设计-生命不息,奋斗不止
  关系型数据库全表扫描分片详解
  MySQL的实现定时执行任务的存储过程
  分布式架构的那点事
  更多...
 IPIP: 已设置保密
楼主      
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。