MySQL使用集合函数查询

有时候并不需要返回实际表中的数据,而只是对数据进行总结。MySQL 提供一些查询功能, 可以对获取的数据进行分析和报告。这些函数的功能有:计算数据表中记录行数的总数、计算某个 字段列下数据的总和,以及计算表中某个字段下的最大值、最小值或者平均值。下面将介绍这些函 数以及如何使用它们。这些聚合函数的名称和作用如下表所示。

接下来,将详细介绍各个函数的使用方法。

  1. COUNT()函数 COUNT()函数统计数据表中包含的记录行的总数,或者根据查询结果返回列中包含的数据行 数。其使用方法有两种: COUNT(*) 计算表中总的行数,不管某列是否有数值或者为空值。 COUNT(字段名)计算指定列下总的行数,计算时将忽略空值的行。 查询 customers 表中总的行数,SQL 语句如下:

 SELECT COUNT(*) AS cust_num FROM customers; 

由查询结果可以看到,COUNT(*)返回 customers 表中记录的总行数,不管其值是什么,返回 的总数的名称为 cust_num。 查询 customers 表中有电子邮箱的顾客的总数,SQL 语句如下:

 SELECT COUNT(c_email) AS email_num FROM customers; 

由查询结果可以看到,表中 5 个 customer 只有 3 个有 email,customer 的 email 为空值 NULL 的记录没有被 COUNT()函数计算。

提 示 :两个例子中不同的数值说明了两种方式在计算总数的时候对待 NULL 值的方式不同:指 定列的值为空的行被 COUNT()函数忽略;如果不指定列,而在 COUNT()函数中使用星号 “*”,则所有记录都不忽略。

前面介绍分组查询的时候,介绍了如何用 COUNT()函数与 GROUP BY 关键字一起来计算不同 分组中的记录总数。 在 orderitems 表中,使用 COUNT()函数统计不同订单号中订购的水果种类,SQL 语句如下:

 SELECT o_num, COUNT(f_id) FROM orderitems GROUP BY o_num; 

从查询结果可以看到,GROUP BY 关键字先按照订单号进行分组,然后计算每个分组中的总 记录数。

  1. SUM()函数 SUM()是一个求总和的函数,返回指定列值的总和。 在 orderitems 表中查询 30005 号订单一共购买的水果总量,SQL 语句如下:

SELECT SUM(quantity) AS items_total FROM orderitems WHERE o_num = 30005;

由查询结果可以看到,SUM(quantity)函数返回订单中所有水果数量之和,WHERE 子句指定 查询的订单号为 30005。 SUM()可以与 GROUP BY 一起使用,来计算每个分组的总和。 在 orderitems 表中,使用 SUM()函数统计不同订单号中订购的水果总量,SQL 语 句如下:

 SELECT o_num, SUM(quantity) AS items_totalFROM orderitems GROUP BY o_num;

由查询结果可以看到,GROUP BY 按照订单号 o_num 进行分组,SUM()函数计算每个分组中 订购的水果的总量。 提 示 :SUM()函数在计算时,忽略列值为 NULL 的行。

  1. AVG()函数 AVG()函数通过计算返回的行数和每一行数据的和,求得指定列数据的平均值。 在 fruits 表中,查询 s_id=103 的供应商的水果价格的平均值,SQL 语句如下:

 SELECT AVG(f_price) AS avg_price FROM fruits WHERE s_id = 103; 

该例中,查询语句增加了一个 WHERE 子句,并且添加了查询过滤条件,只查询 s_id = 103 的记录中的 f_price。因此,通过 AVG()函数计算的结果只是指定的供应商水果的价格平均值,而 不是市场上所有水果价格的平均值。 AVG()可以与 GROUP BY 一起使用,来计算每个分组的平均值。 在 fruits 表中,查询每一个供应商的水果价格的平均值,SQL 语句如下:

 SELECT s_id,AVG(f_price) AS avg_price FROM fruits GROUP BY s_id; 

GROUP BY 关键字根据 s_id 字段对记录进行分组,然后计算出每个分组的平均值,这种分组 求平均值的方法非常有用,例如求不同班级学生成绩的平均值、求不同部门工人的平均工资、求各 地的年平均气温等。 提 示 :AVG()函数使用时,其参数为要计算的列名称,如果要得到多个列的多个平均值,则需要 在每一列上使用 AVG()函数。

  1. MAX()函数 MAX()返回指定列中的最大值。 在 fruits 表中查找市场上价格最高的水果值,SQL 语句如下:

>SELECT MAX(f_price) AS max_price FROM fruits; 

由结果可以看到,MAX()函数查询出了 f_price 字段的最大值 15.70。 MAX()也可以和 GROUP BY 关键字一起使用,求每个分组中的最大值。 在 fruits 表中查找不同供应商提供的价格最高的水果值,SQL 语句如下:

 SELECT s_id, MAX(f_price) AS max_price FROM fruits GROUP BY s_id; 

由结果可以看到,GROUP BY 关键字根据 s_id 字段对记录进行分组,然后计算出每个分组中 的最大值。 MAX()函数不仅适用于查找数值类型,也可应用于字符类型。 在 fruits 表中查找 f_name 的最大值,SQL 语句如下:

 SELECT MAX(f_name) FROM fruits; 

由结果可以看到,MAX()函数可以对字母进行大小判断,并返回最大的字符或者字符串值。 提 示 :MAX()函数除了用来找出最大的列值或日期值之外,还可以返回任意列中的最大值,包 括返回字符类型的最大值。在对字符类型数据进行比较时,按照字符的 ASCII 码值大小 进行比较,从 a~z,a 的 ASCII 码最小,z 的最大。在比较时,先比较第一个字母,如果 相等,继续比较下一个字符,一直到两个字符不相等或者字符结束为止。例如,‘b’与 ‘t’比较时,‘t’为最大值;“bcd”与“bca”比较时,“bcd”为最大值。

  1. MIN()函数 MIN()返回查询列中的最小值。 在 fruits 表中查找市场上价格最低的水果值,SQL 语句如下:

>SELECT MIN(f_price) AS min_price FROM fruits; 

由结果可以看到,MIN ()函数查询出了 f_price 字段的最小值 2.20。 MIN()也可以和 GROUP BY 关键字一起使用,求出每个分组中的最小值。 在 fruits 表中查找不同供应商提供的价格最低的水果值,SQL 语句如下:

 SELECT s_id, MIN(f_price) AS min_price FROM fruits GROUP BY s_id; 

由结果可以看到,GROUP BY 关键字根据 s_id 字段对记录进行分组,然后计算出每个分组中 的最小值。 MIN()函数与 MAX()函数类似,不仅适用于查找数值类型,也可应用于字符类型。

猜你喜欢

转载自blog.csdn.net/weixin_45392969/article/details/129531634