MySQL汇总数据

本文介绍了MySQL中的五种聚集函数:AVG(), COUNT(), MAX(), MIN() 和 SUM() 的使用方法及注意事项,包括如何计算平均值、计数、查找最大值最小值及求和等,并展示了如何使用DISTINCT关键字来对不同的值进行聚集。
摘要由CSDN通过智能技术生成

说明:本文所使用的数据库样例表创建脚本下载地址:https://github.com/zhaoxd298/mysql_scripts

一、聚集函数

  我们经常需要汇总数据而不是把它们实际检索出来,为此MySQL提供了专门的函数。使用这些函数,MySQL查询可用于检索数据,以便分析和报表生成。这种类型的检索例子有一下几种:
  1.确定表中行数(或者满足某个条件或包含某个特定值的行数);
  2.获得表中行组的和;
  3.找出列表中的最大值、最小值和平均值。

  为方便这种类型的检索,MySQL给出了5个聚集函数,如下表:
这里写图片描述

1.AVG()函数

  AVG()可用来返回所有列的平均值,也可用来返回特定列或行的平均值。下面例子使用AVG()返回products表中所有产品的平均价格:

mysql> SELECT AVG(prod_price) AS avg_price
    -> FROM products;

执行结果:
这里写图片描述

  下面例子返回特定供应商提供产品的平均价格:

mysql> SELECT AVG(prod_price) AS avg_price
    -> FROM products
    -> WHERE vend_id = 1003;

执行结果:
这里写图片描述

注意: AVG()只能确定单列的平均值,为了获得多个列的平均值必须使用多个AVG()函数。AVG()函数会忽略列值为NULL的行。

2.COUNT()函数

  COUNT()函数进行计数。可利用COUNT()确定表中行的数目或符合特定条件的行的数目。COUNT()函数有两种使用方式:
  1.使用COUNT(*)对表中行的数目进行计数,不管列中包含的是空值(NULL)还是非空值;
  2.使用COUNT(column)对特定列中具有值的行进行计数,忽略NULL值。

  下面的例子返回customers表中客户的总数:

mysql> SELECT COUNT(*) AS num_cust
    -> FROM customers;

执行结果:
这里写图片描述

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

mysql> SELECT COUNT(cust_email) AS num_cust
    -> FROM customers;

执行结果:
这里写图片描述

3.MAX()函数

  MAX()返回指定列中的最大值。MAX()要求必须指定列名,使用方法如下:

mysql> use crashcourse;
mysql> SELECT MAX(prod_price) AS max_price
    -> FROM products;

执行结果:
这里写图片描述

  MAX()一般用来找出最大的数值或日期值,但MySQL允许它返回任意列中的最大值,包括返回文本列中的最大值。MAX()函数忽略列值为NULL的行。

4.MIN()函数

  MIN()的功能与MAX()相反,它返回指定列的最小值,MIN()也必须要指定列名,使用方法如下:

mysql> SELECT MIN(prod_price) AS min_price
    -> FROM products;

执行结果:
这里写图片描述

  MIN()与MAX()类似,也允许返回任意列的最小值。MIN()也忽略列值为NULL的行。

5.SUM()函数

  SUM()用来返回指定列值的和,使用方法如下:

mysql> SELECT SUM(quantity) AS items_ordered
    -> FROM orderitems
    -> WHERE order_num = 20005;

执行结果:
这里写图片描述

  SUM()也可以用来合计计算值。下面例子中,合计每项物品的item_price*quantity,得出总的订单金额:

mysql> SELECT SUM(item_price*quantity) AS total_price
    -> FROM orderitems
    -> WHERE order_num = 20005;

执行结果:
这里写图片描述

二、聚集不同值

  以上5个聚集函数都可以如下使用:
  1.对所有的行执行计算:指定ALL参数或不给参数(因为ALL是默认行为);
  2.只包含不同的值:指定DIATINCT参数。

  下面的例子使用AVG()函数返回特定供应商的产品的平均价格,但它使用了DISTINCT参数,因此平均值只考虑各个不同的价格:

mysql> SELECT AVG(DISTINCT prod_price) AS avg_price
    -> FROM products
    -> WHERE vend_id = 1003;

执行结果:
这里写图片描述

  可以看到,在使用了DISTINCT后,计算所得的平均值avg_price比较高,因为有多个物品具有相同的较低价格,排除它们提升了平均价格。

组合聚集函数

  目前为止所有聚集函数荔枝都只涉及单个函数。但实际上SELECT语句可以根据需要包含多个聚集函数,请看下面例子:

mysql> SELECT COUNT(*) AS num_items,
    -> MIN(prod_price) AS price_min,
    -> MAX(prod_price) AS price_max,
    -> AVG(prod_price) AS price_avg
    -> FROM products;

执行结果:
这里写图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值