Mysql教程

10.3使用集合函数查询

集合函数包括COUNT()、SUM(), AVG(), MAX和MIN()。其中,COUNT()用来统 计记录的条数;SUM()用来计算字段的值的总和;AVG()用来计算字段的值的平均值;MAX()用来查询字段的最大值;MIN()用来査询字段的最小值。当需要对表中的记录求和、求平均值、查询最大值和查询最小值等操作时,可以使用集合函数。例如,需要计算学生成绩表中的平均成绩,可以使用AVG()函数。GROUP BY关键字通常需要与集合函数一起使用。 本节中将详细讲解各种集合函数。

10.3.1COUNT()函数

COUNT()函数用来统计记录的条数。如果要统计employee表中有多少条记录,可以使用COUNT()函数。如果要统计employee表中不同部门的人数,也可以使用COUNT()函数。

【示例10-40】下面使用COUNT()函数统计employee表的记录数。SELECT语句如下:

SELECT COUNT(*) FROM employee;

执行结果如下:

mysql> SELECT COUNT(*) FROM employee;
+----------+
| COUNT(*) |
+----------+
|        4 |
+----------+
1 row in set (0.01 sec)

结果显示employee表中共有4条记录。本例说明,COUNT()函数计算出了employee 表中的所有记录的总数。

【示例10-41】下面使用COUNT()函数统计employee表中不同d_id值的记录数。COUNT()函数与GOUPE BY关键字一起使用。SELECT语句如下:

mysql> select d_id,count(*) from employee group by d_id;
+------+----------+
| d_id | count(*) |
+------+----------+
| 1001 |        2 |
| 1002 |        1 |
| 1004 |        1 |
+------+----------+
3 rows in set (0.00 sec)

结果显示,employee表中d_id为1001的记录有两条;d_id为1002的记录有一条;d_id 为1003的记录也是一条。从这个例子可以看出,表中的记录先通过GROUP BY关键字进行分组。然后,再计算每个分组的记录数。

10.3.2 SUM()函数

SUM()函数是求和函数。使用SUM()函数可以求出表中某个字段取值的总和。例如,可以用SUM()函数来求学生的总成绩。

【示例10-42】下面使用SUM0函数统计grade表中学号为1001的同学的总成绩。SELECT语句如下:

SELECT num, SUM(score) FROM grade WHERE num=1001;

在执行该SELECT语句之前,可以先查看学号为1001的同学的各科成绩。査询结果如下:

mysql> select *  from grade ;
+------+--------+-------+
| num  | course | score |
+------+--------+-------+
| 1001 | 数学      |    80 |
| 1001 | 语文       |    90 |
| 1001 | 英语      |    85 |
| 1001 | 计算机       |    95 |
+------+--------+-------+
4 rows in set (0.02 sec)

现在执行SUN()函数的SELECT语句,来计算足额生的总成绩,执行结果如下:

mysql> select num,SUM(score) from grade where num=1001;
+------+------------+
| num  | SUM(score) |
+------+------------+
| 1001 |        350 |
+------+------------+
1 row in set (0.00 sec)

结果显示,学号为1001的同学的总成绩为350,正好是他各科成绩的总和。本例可以看出,使用SUM()函数计算出了指定字段取值的总和。SUM()函数通常和 GROUP BY关键字一起使用。这样可以计算出不同分组中某个字段取值的总和.

【示例10-43】下面将grade表按照num字段进行分组。然后,使用SUM()闲数统计各分组的总成绩。SELECT语句如下:

SELECT num ,SUM(score) FROM grade GROUP BY num;


执行结果如下:

mysql> SELECT num ,SUM(score) FROM grade GROUP BY num;
+------+------------+
| num  | SUM(score) |
+------+------------+
| 1001 |        350 |
| 1002 |        357 |
| 1003 |        358 |
+------+------------+
 3 rows in set (0.00 sec)

grade表按num字段分为3组,分别是num等于1001、1002和1003。然后,分别计算出这3组的总成绩。

注意:SUM()函数只能计算数值类型的字段。包括int类型、float类型、double 类型、decimal类型等。字符类型的字段不能使用SUM()函数进行计算。使用SUM()函数计算字符类型字段时,计算结果都为0。

10.3.3 AVG()函数

AVG()函数是求平均值的函数。使用AVG()函数可以求出表中某个字段取值的平均值。例如,可以用AVG()函数来求平均年龄,也可以使用AVG()函数来求学生的平均成绩。

【示例10-44】下面使用AVG()函数计算表中平均年龄(age)。SELECT语句如下:

SELECT AVG(age) FROM employee;

执行结果如下:

mysql> select  AVG(age) from employee;
+----------+
| AVG(age) |
+----------+
|  22.5000 |
+----------+
1 row in set (0.00 sec)

结果显示,AVG()函数计算出age字段的平均值。AVG()函数经常与GROUP BY字段一起使用,来计算每个分组的平均值。

【示例10-45】下面使用AVG()函数计算grade表中不同科目的平均成绩。SELECT语句如下:

SELECT course, AVG(score) FROM grade GROUP BY course;
mysql>SELECT course, AVG(score) FROM grade GROUP BY course;
+------------+-----------------+
|   course   |    AVG(score)   |
+------------+-----------------+
|    数学    |    82.6667      |
|    语文    |    92.6667      |
|    英语    |    86.3333      |
|   计算机   |    93.3333      |
+------------+-----------------+
4 rows in set(0.00 sec)

使用GROUP BY关键字将grade表的记录按照course字段进行分组。然后计算出每组的平均成绩。本例可以看出,AVG()函数与GROUP BY关键字结合后可以灵活的计算平均值。通过这种方式可以计算各个科目的平均分数,还可以计算每个人的平均分数。如果按 照班级和科目两个字段进行分组,还可以计算出每个班级不同科目的平均分数。

10.3.4 MAX函数

MAX()函数是求最大值的函数。使用MAX()函数可以求出表中某个字段取值的最大值。例如,可以用MAX()函数来査询最大年龄,也可以使用MAX()函数来求各科的最高成绩。

【示例10-46】下面使用MAX()函数查询employee表中的最大年龄(age),SELECT 语句如下:

SELECT MAX(age) FROM employee;

执行结果如下:

mysql> SELECT MAX(age) FROM employee;
+----------+
| MAX(age) |
+----------+
|       26 |
+----------+
1 row in set (0.00 sec)

结果显示MAX()函数查询出了age字段的最大值为26.MAX()函数通常与GROUP BY 字段一起使用,来计算每个分组的最大值。

【示例10-47】下面使用MAX()函数查询gradde表中不同科目的最高成绩。SELECT语句如下:

SELECT num, course, MAX(score) FROM grade GROUP BY course;

执行结果如下:

mysql> SELECT num, course, MAX(score) FROM grade GROUP BY course;
+------+--------+------------+
| num  | course | MAX(score) |
+------+--------+------------+
| 1001 | 数学      |         80 |
| 1001 | 英语      |         85 |
| 1001 | 计算机       |         95 |
| 1001 | 语文       |         90 |
+------+--------+------------+
4 rows in set (0.00 sec)

结果显示,name字段中zk是最大值。本示例说明,MAX()可以计算字符和字符串的最大值。MAX()函数是使用字符对应的ASCII码进行计算的。

说明:在mysql表中,字母a最小,字母z最大。因为,a的ASCII码值最小。在使用厘MAX()函数进行比较时,先比较第一个字母。如果第一个字母相等时,再继续往下一个字母进行比较。例如,hhc和hhz只有比较到第3个字母时才能比出大小。

10.3.5 MIN函数

MIN()函数是求最小值的函数。使用MIN()函数可以求出表中某个字段取值的最小值。 例如,可以用MIN()函数来查询最小年龄,也可以使用MIN()函数来求各科的最低成绩。

【示例10-49】下面使用MIN[()函数查询employee表中的最小年龄。SELECT语句如下:

SELECT MIN(age) FROM employee;

执行结果如下:

mysql> SELECT MIN(age) FROM employee;
+----------+
| MIN(age) |
+----------+
|       15 |
+----------+
1 row in set (0.00 sec)

结果显示MIN()函数查询出了age字段的最小值为15。MIN()函数经常与GROUP BY字段一起使用,来计算每个分组的最小值。

【示例10-50】下面使用MIN()函数查询grade表中不同科目的最低成绩。SELECT语句如下:

SELECT course, MIN(score) FROM grade GROUP BY course;

执行结果如下:

mysql> SELECT course, MIN(score) FROM grade GROUP BY course;
+--------+------------+
| course | MIN(score) |
+--------+------------+
| 数学      |         80 |
| 英语      |         85 |
| 计算机       |         95 |
| 语文       |         90 |
+--------+------------+
4 rows in set (0.00 sec)

先将grade表的记录按照course字段进行分组,然后查询出每组的最低成绩。MIN() 函数也可以用来查询字符类型的数据。其基本方法与MAX()函数相似。


关注微信获取最新动态