龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 数据库类 > MySQL 技术 >

MySQL高级特性之集合函数(1)(2)

时间:2011-04-12 23:18来源:未知 作者:admin 点击:
分享到:
计算字段的平均值 需要计算这些值的平均值。使用函数AVG(),你可以返回一个字段中所有值的平均值。 假如你对你的站点进行一次较为复杂的民意调查

计算字段的平均值

需要计算这些值的平均值。使用函数AVG(),你可以返回一个字段中所有值的平均值。

假如你对你的站点进行一次较为复杂的民意调查。访问者可以在1到10之间投票,表示他们喜欢你站点的程度。你把投票结果保存在名为vote的INT型字段中。要计算你的用户投票的平均值,你需要使用函数AVG():

SELECT AVG(vote) FROM opinion

这个SELECT语句的返回值代表用户对你站点的平均喜欢程度。函数AVG()只能对数值型字段使用。这个函数在计算平均值时也忽略空值。

再给出一个实际例子,例如我们要计算pet表中每种动物年龄的平均值,那么使用AVG()函数和GROUP BY子句:

mysql> SELECT species,AVG(CURDATE()-birth) FROM pet GROUP BY species;

返回的结果为:

+---------+----------------------+

| species | AVG(CURDATE()-birth) |

+---------+----------------------+

| bird    |                34160 |

| cat     |              74959.5 |

| dog     |      112829.66666667 |

| hamster |                19890 |

| snake   |                49791 |

+---------+----------------------+

计算字段值的和

假设你的站点被用来出售某种商品,已经运行了两个月,是该计算赚了多少钱的时候了。假设有一个名为orders的表用来记录所有访问者的定购信息。要计算所有定购量的总和,你可以使用函数SUM():

SELECT SUM(purchase_amount) FROM orders

函数SUM()的返回值代表字段purchase_amount中所有值的总和。字段purchase_amount的数据类型也许是DECIMAL类型,但你也可以对其它数值型字段使用函数SUM()。

用一个不太恰当的例子说明,我们计算pet表中同种宠物的年龄的总和:

mysql> SELECT species,SUM(CURDATE()-birth) FROM pet GROUP BY species;

你可以查看结果,与前一个例子对照:

+---------+----------------------+

| species | SUM(CURDATE()-birth) |

+---------+----------------------+

| bird    |                68320 |

| cat     |               149919 |

| dog     |               338489 |

| hamster |                19890 |

| snake   |                49791 |

+---------+----------------------+

计算字段值的极值

求字段的极值,涉及两个函数MAX()和MIN()。

例如,还是pet表,你想知道最早的动物出生日期,由于日期最早就是最小,所以可以使用MIN()函数:

mysql> SELECT MIN(birth) FROM pet;

+------------+

| MIN(birth) |

+------------+

| 1989-05-13 |

+------------+

但是,你只知道了日期,还是无法知道是哪只宠物,你可能想到这样做:

SELECT name,MIN(birth) FROM pet;

但是,这是一个错误的SQL语句,因为集合函数不能和非分组的列混合使用,这里name列是没有分组的。所以,你无法同时得到name列的值和birth的极值。

MIN()函数同样可以与GROUP BY子句配合使用,例如,找出每种宠物中最早的出生日期:

mysql> SELECT species,MIN(birth) FROM pet GROUP BY species;

下面是令人满意的结果:

+---------+------------+

| species | MIN(birth) |

+---------+------------+

| bird    | 1997-12-09 |

| cat     | 1993-02-04 |

| dog     | 1989-05-13 |

| hamster | 1999-03-30 |

| snake   | 1996-04-29 |

+---------+------------+

另一方面,如果你想知道最近的出生日期,就是日期的最大值,你可以使用MAX()函数,如下例所示:

mysql> SELECT species,MAX(birth) FROM pet GROUP BY species;

+---------+------------+

| species | MAX(birth) |

+---------+------------+

| bird    | 1998-09-11 |

| cat     | 1994-03-17 |

| dog     | 1990-08-31 |

| hamster | 1999-03-30 |

| snake   | 1996-04-29 |

+---------+------------+

总结

在本节中,介绍了一些典型的集合函数的用法,包括计数、均值、极值和总和,这些都是SQL语言中非常常用的函数。

这些函数之所以称之为集合函数,是因为它们应用在多条记录中,所以集合函数最常见的用法就是与GROUP BY子句配合使用,最重要的是集合函数不能同未分组的列混合使用。

  1. 向MySQL数据表插入行记录(INSERT)
  2. 查询数据表中的记录(SELECT)

精彩图集

赞助商链接