单表查询----聚合函数
-
普通函数输入是一列,输出也是一列,输出列中的行与输出列的行,作用于列的每一个单元格,聚合函数以列输入,但是输出结果列只有一行。
-
聚合函数是汇总处理数据,不是像SELECT一样的检索数据。比如求和、求平均值。
聚合函数–参数是列名
(1)计数函数 COUNT(列名)
COUNT(*) 确定表中行的数目
COUNT(1) 确定表中第一列的行的数目。如果表中没有NULL,那么任何一列的行数目是一样的
COUNT(col) 确定col这一列有多少行,只作用非NULL行,但是不可以计数多列,即参数只能是一个列名
COUNT(DISTINCT col) 对行去重计数
注:
- COUNT是唯一可以用*的聚合函数。
- COUNT(*)
(col表示列,column) - COUNT忽略NULL,比如实际有8行,其中一行是NULL,那么COUNT的结果是7.
- 尽量不要再一个语句中写多个COUNT,比如尽量不要这样写:
SELECT
COUNT(m.prod_name)
,COUNT(m.saleprice)
FROM milk_tea AS m;
说是会出现问题??还没试出什么问题。。。
(2)求和函数 SUM
指定列的和:SUM(col)
具体用法:
- 区别于直接四则运算;因为四则运算是不能做有空值的运算,如果有空值,那么四则运算的结果就是空值,而SUM求和是直接跳过空值,如果有空值,就忽略空值,计算其他所有非空值的和。
- 只对数值型作用;
- 可以同时操作多个列;
- 可以作用于计算表达式,指的是参数可以是列名,参数也可以是列名之间的计算
(3)均值函数 AVG
指定列的平均值:AVG(col)
具体用法:
- 分母不对NULL计数,即空值被过滤掉,即列的SUM值/列的COUNT值(分子也不对NULL行计数)
- 可以同时操作多个列
(4)最大值函数 MAX
指定列的最大值:MAX(col)
具体用法:
-
适用于数值型、文本型、日期型,其中文本型也是可以比较最大值最小值的,只是用的比较少
-
要求该列可以排序,文本数据排序考虑的是编码的问题
-
忽略NULL,因为NULL没法比较大小
-
DISTINCT无意义, DISTINCT指的是去重,但是不论去重不去重,最大值依然是最大值,所以结果是一样的。
(5)最小值函数 MIN
指定列的最小值:MIN(col)
具体用法:
-
适用于数值型、文本型、日期型,其中文本型也是可以比较最大值最小值的,只是用的比较少
-
要求该列可以排序,文本数据排序考虑的是编码的问题
-
忽略NULL,因为NULL没法比较大小
-
DISTINCT无意义, DISTINCT指的是去重,但是最大值依然是最大值,所以结果是一样的。
Navicat实操
1. count
SELECT
COUNT(*) #这个表格的行数
, COUNT(1) #第一列的行数
, COUNT(3) #第三列的行数
FROM milk_tea AS m;
SELECT
COUNT(m.pro_date) #pro_date列的行数
, COUNT(m.prod_name) #prod_name列的行数
FROM milk_tea AS m;
#m.pro_date有一个空值
#最好不要一个语句中写两个COUNT函数
SELECT
COUNT(m.net_w)
, COUNT(DISTINCT m.net_w) #先对net_w列去重,再计数该列的行数
FROM milk_tea AS m;
#DISTINCT去重计数
#最好不要一个语句中写两个COUNT函数,可能会出错
SELECT DISTINCT m.sale_price FROM milk_tea AS m ;
# DISTINCT作用于所有列。去重
SELECT COUNT(DISTINCT m.sale_price) FROM milk_tea AS m;
# sale_price中 8行,有一行是NULL,DISTINCT去重之后NU