我们经常需要汇总数据而不是把它们实际检索出来,常用场景有以下几种:
①确定表中的行数(或满足某种条件或包含某个特定值的行数)
②获得表中行组的总和。
③找出表列的最大值、最小值和平均值。
函数 | 说明 |
---|---|
AVG() | 返回某列的平均值 |
COUNT() | 返回某列的行数 |
MAX() | 返回某列的最大值 |
MIN() | 返回列的最小值 |
SUM() | 返回某列值之和 |
AVG()函数通过对表中行数的计数并计算特定列值之和,求得该列的平均值,可以返回该列所有数的平均值,也可以返回特定列或行的平均值。
SELECT AVG(prod_price) AS avg_price FROM products
说明:avg_price是一个别名,返回列prod_price的平均值。
select avg(prod_price) as avg_price from products where vend_id=1003
说明:求vend_id=1003列的平均值。
avg函数忽略列值为null的行。
count()函数返回表中行的数目或者符合特定条件行的数目。
两种用法:
①count(*) 对表中行的数目进行统计,不管表中是否包含空值(null)。
②使用count(column) 来进行统计,不包含null值。
select count(*) as num_cust from customers;
说明:该条语句对表中所有记录进行计数,无论表中是否包含空值。
select count(cust_email) as num_cust from customer;
说明:对cust_email有值的行进行计数,忽略null的行。
max() 返回指定列表的最大值,max()要求指定列名。
select max(prod_price) as max_price from products;
说明:max()返回products表中最贵的物品的价格。忽略null值。
select min(prod_price) as min_price from product;
说明:min()返回products表中最便宜的物品的价格。忽略null。
sum()用来返回指定列值的和(总计)
select sum(quantity) as items_ordered from orderitems where order_num=20005;
也可以合计:计算总订单金额。忽略null值。
select sum(item_price * quantity) as total_price from orderitems where order_num=20005;
对AVG()、COUNT()函数指定不同的值:distinct.
select avg(distinct prod_price) as avg_price from products where vend_id=1003;
求列prod_price不同值的平均值。
对于count()函数。需要在指定列的时候才能使用distinct,而不能在count(*)上使用。
以上的函数可以组合使用:
select count(*) as num_items,min(prod_price) as min_price, max(prod_price) as max_price, avg(prod_price) as price_avg from products;
我不生产知识,我只是知识的搬运工。
参考:MySQL必知必会。