MySQL-聚集函数(汇总)

现实生活中我们想要的数据常常是汇总好的数据,比如想要最大值,最小值,平均值,求和等。

聚集函数 说明
avg() 列的平均值
count() 列的行数
max() 列中最大值
min() 列中最小值
sum() 列中值的和

AVG()平均值

先看下产品表

SELECT prod_name, prod_price
FROM products;

MySQL-聚集函数(汇总)_第1张图片

我们来看看所有产品的平均价格

SELECT AVG(prod_price) AS avg_price
FROM products;

MySQL-聚集函数(汇总)_第2张图片

当然,也可以计算特定列的平均值,比如我只想看供应商id为1003供应的产品平均价格

SELECT AVG(prod_price) AS avg_price
FROM products
WHERE vend_id = 1003;

MySQL-聚集函数(汇总)_第3张图片

注意:AVG()只能用于单列,要想用多个列的平均值,就要用多个AVG()。

AVG()自动**忽略**NULL值

使用之前的DISTINCT来提取不同值,重新看下由1003生成的产品平均值

SELECT AVG(DISTINCT prod_price) AS avg_price
FROM products
WHERE vend_id = 1003;

MySQL-聚集函数(汇总)_第4张图片
这次得出的平均价格稍稍高了一点,因为去掉了一些重复的低价格产品

COUNT() 行数

两种使用方式:

  • COUNT(*) 针对所有行进行计数,包括有NULL值的行
  • COUNT(列)对指定列的行进行计数,忽略NULL行

我们先来看顾客表的总体情况

SELECT * FROM customers;

MySQL-聚集函数(汇总)_第5张图片

现在我们想整张表一共有多少行

SELECT COUNT(*) FROM customers;

MySQL-聚集函数(汇总)_第6张图片

上面得出顾客表一共有5行,我们注意到cust_email里有NULL值,现在在我们单独对cust_email进行计数看看是5行还是去掉2个NULL行的3行

SELECT COUNT(cust_email) FROM customers;

MySQL-聚集函数(汇总)_第7张图片

得出是3行,也验证了上面我们说的,COUNT()对特定列的行数进行计数时会自动忽略NULL值。

Max() 最大值或最后一行

Max()可以用于任意列,如果是文本列的话(已排序),提取最后一行。

我们看下最贵的产品价格是多少

SELECT Max(prod_price) AS max_price
FROM products;

MySQL-聚集函数(汇总)_第8张图片

上面得出最贵的价格是55.但是刚刚我在试的时候突然想看下最贵的产品名叫什么,结果得出是叫.5 ton anvil。
MySQL-聚集函数(汇总)_第9张图片
但事实上最贵的产品是JetPack 2000.
MySQL-聚集函数(汇总)_第10张图片

问题来了,不知道如何在已得出最高价的情况下同时检索出它的商品名
这个问题好像涉及到后面的分组知识,先放一放,等学了再来解决。

现在将max()用于文本数值(已排序)看看

SELECT prod_name
FROM products
ORDER BY prod_name;

MySQL-聚集函数(汇总)_第11张图片

用Max()得到最后一行,应该是TNT (5 sticks)

SELECT MAX(prod_name)
FROM products
ORDER BY prod_name;

MySQL-聚集函数(汇总)_第12张图片

MIN()最小值或第一行

在此只看MIN()用于文本数值取第一行的结果,理论上应该是.5 ton anvil

SELECT MIN(prod_name)
FROM products
ORDER BY prod_name;

MySQL-聚集函数(汇总)_第13张图片

SUM() 求和

SELECT SUM(prod_price) AS total_price
FROM products;

MySQL-聚集函数(汇总)_第14张图片

你可能感兴趣的:(MySQL)