经常需要汇总数据而不用把它们实际检索出来,此MySQL提供了专门的函数。使用这些函数,MySQL查询可用于检索数据,以便分析和报表生成。
检索例子有以下几种
1.确定表中行数(或者满足某个条件或包含某个特定值的行数)。
2.获得表中行组的和。
3.找出表列(或所有行或某些特定的行)的最大值、最小值和平均值
聚集函数
运行在行组上,计算和返回单个值的函数。
函数 | 说明 |
---|---|
AVG() | 返回某列的平均值 |
COUNT() | 返回某列的行数 |
MAX() | 返回某列的最大值 |
MIN() | 返回某列的最小值 |
SUM() | 返回某列之和 |
AVG()函数
定义:AVG()通过对表中行数计数并计算特定列值之和,求得该列的平均值
- 输入:使用AVG()返回products表中所有产品的平均价格:
select AVG(price) AS avg_price from products
-
输出:image.png
分析:此SELECT语句返回值avg_Price,它包含products表中所有产品的平均价格。avg_price是一个别名。
COUNT()函数
定义:COUNT()函数进行计算。可利用COUNT()确定表中行的数目或符合特定条件的行的数目。
COUNT()函数有两种使用方式。
- 使用COUNT(*)对表中行的数目进行计数,不管表列中包含的是空值(NULL)还是非空值。
- 使用COUNT(column)对特定列中具有值的行进行计数,忽略NULL值
举例
- 输入:使用COUNT()统计患者表数量
SELECT COUNT(*) FROM patient p WHERE p.drugstore_code ='935'
-
输出
image.png
1,输入:
SELECT COUNT(p.phone2) FROM patient p WHERE p.drugstore_code ='935'
2.输出
MAX()函数
定义:MAX()返回指定列中的最大值。MAX()要求指定列名
1,输入:
SELECT MAX(p.age) FROM patient p
2.输出
3.分析
MAX(),返回patient 表中age 最大的年龄
MIN()函数
定义:MIN()的功能正好与MAX()功能相反,它返回指定列的最小值
1,输入:
SELECT MIN(p.age) FROM patient p
2.输出
3.分析
MIN(),返回patient 表中age 最小的年龄
SUM()函数
定义:SUM()用来返回指定列值的和(总计)
例子1,orderitems表包含订单中实际的物品,每个物品有相应的数量(quantity)。可如下检索所订购物品的总数(所有quantity值之和)
1.输入:
select SUM(quantity) AS items_oedered from orderitems
2.输出:
3.分析
函数SUM(quantity)返回订单中所有物品数量之和,WHERE子句保证只统计某个物品订单中的物品。
例2:SUM()也可以用来合计计算值。在下面的例子中,合计每项物品的item_price*quantity,得出总的订单金额
1.输入:
select SUM(item*quan) AS total_price from orderitems where order_num=200005
2.输出
3.分析
函数SUM(item*quan)返回订单中所有物品价钱之和,WHERE子句同样保证只统计某个物品订单中的物品。
聚集不同值
函数中使用 DISTINCT
例如:使用AVG()函数返回特定供应商提供的产品的平均价格。使用了DISTINCT参数,均值只考虑各个不同的年龄:
1.输入:
--- 未使用
SELECT AVG(p.age) FROM patient p
--- 已使用
SELECT AVG(DISTINCT p.age) FROM patient p
2.输出
注意
如果指定列名,则DISTINCT只能用于COUNT()。DISTINCT不能用于COUNT(*),因此不允许使用COUNT(DISTINCT),否则会产生错误。类似地,DISTINCT必须使用列名,不能用于计算或表达式。
组合聚集函数
SELECT 语句可根据需要包含多个聚集函数
举例:查询患者表中,平均年龄,最大年龄,最小年龄
1.输入
SELECT AVG(DISTINCT p.age),MIN(p.age),MAX(p.age) FROM patient p
2.输出
3.分析
这里用单条select 语句执行了3个聚集计算,返回平均年龄,最大年龄,最小年龄