现实生活中我们想要的数据常常是汇总好的数据,比如想要最大值,最小值,平均值,求和等。
聚集函数 | 说明 |
---|---|
avg() | 列的平均值 |
count() | 列的行数 |
max() | 列中最大值 |
min() | 列中最小值 |
sum() | 列中值的和 |
先看下产品表
SELECT prod_name, prod_price
FROM products;
我们来看看所有产品的平均价格
SELECT AVG(prod_price) AS avg_price
FROM products;
当然,也可以计算特定列的平均值,比如我只想看供应商id为1003供应的产品平均价格
SELECT AVG(prod_price) AS avg_price
FROM products
WHERE vend_id = 1003;
注意:AVG()只能用于单列,要想用多个列的平均值,就要用多个AVG()。
AVG()自动**忽略**NULL值
使用之前的DISTINCT来提取不同值,重新看下由1003生成的产品平均值
SELECT AVG(DISTINCT prod_price) AS avg_price
FROM products
WHERE vend_id = 1003;
这次得出的平均价格稍稍高了一点,因为去掉了一些重复的低价格产品
两种使用方式:
我们先来看顾客表的总体情况
SELECT * FROM customers;
现在我们想整张表一共有多少行
SELECT COUNT(*) FROM customers;
上面得出顾客表一共有5行,我们注意到cust_email里有NULL值,现在在我们单独对cust_email进行计数看看是5行还是去掉2个NULL行的3行
SELECT COUNT(cust_email) FROM customers;
得出是3行,也验证了上面我们说的,COUNT()对特定列的行数进行计数时会自动忽略NULL值。
Max()可以用于任意列,如果是文本列的话(已排序),提取最后一行。
我们看下最贵的产品价格是多少
SELECT Max(prod_price) AS max_price
FROM products;
上面得出最贵的价格是55.但是刚刚我在试的时候突然想看下最贵的产品名叫什么,结果得出是叫.5 ton anvil。
但事实上最贵的产品是JetPack 2000.
问题来了,不知道如何在已得出最高价的情况下同时检索出它的商品名
这个问题好像涉及到后面的分组知识,先放一放,等学了再来解决。
现在将max()用于文本数值(已排序)看看
SELECT prod_name
FROM products
ORDER BY prod_name;
用Max()得到最后一行,应该是TNT (5 sticks)
SELECT MAX(prod_name)
FROM products
ORDER BY prod_name;
在此只看MIN()用于文本数值取第一行的结果,理论上应该是.5 ton anvil
SELECT MIN(prod_name)
FROM products
ORDER BY prod_name;
SELECT SUM(prod_price) AS total_price
FROM products;