五. 聚合函数
- MySQL中的聚集函数有五个
函数名 | 解释 |
count() | 求行数 |
sum() | 求和值 |
avg() | 求平均值 |
max() | 求最大值 |
min() | 求最小值 |
- 其中, sum(),avg(),max(),min() 括号里面跟的是列名, 表示求这个列如 age列的 总和,平均值,最大值,最小值。
- 这个列,是数字类型。
- count() 函数可以计算出共有多少条记录。
五.一 sum(),avg() 等聚合函数的使用
- 如 查询出 age 的总和,平均数,最大值,最小值。
select sum(age) as '总和',avg(age) as '平均数',max(age) as '最大值', min(age) as '最小值' from user;
- 但聚合函数,是不能与非分组字段连用的,包括它本身列。
如:
select u.age,sum(age) from user u;
- 这样是错误的。 是不能连用的。
In aggregated query without GROUP BY, expression #1 of SELECT list contains nonaggregated column ‘yuejl.u.age’; this is incompatible with sql_mode=only_full_group_by
- 但可以分组时,进行不同的使用。 关于分组的使用,后面会讲解。
select u.age,sum(u.age) from user u group by u.age;
五.二 count() 聚合函数
- count() 统计行数, 在开发中非常常见, 如统计数目和分页查询。
- 有两个常见的方式:
count(*) 统计表中总的行数,不管某列是否有数值或者为空值。
count(列名) 统计指定列下的行数,计算时将忽略 空值,只计算有数值的。
往 user 表中再插入两条 name 为空的数据。
insert into user(name,sex,birthday,age,deptId) values (null,'女','2004-10-26',23,3); insert into user(name,sex,birthday,age,deptId) values (null,'男','2004-2-7',25,1);
五.二.一 使用 count(*) 进行查询
select count(*) from user u;
- 原先的5条,加上新插入的2条,共7条。
五.二.二 使用 count(name) 进行查询
select count(name) from user u;
- 共有 五条记录, 不包括 最后两条 name为null的两条数据。
五.二.三 使用 count(sex) 进行查询
目前的数据,所有的记录 都存在sex, 即sex 均不为空。 这个时候,查询一下 sex
select count(sex) from user u;
- 共有7条数据。
count(sex) 与 count(*) 的结果相同, 因为 sex 属性值中没有为空值的数据。
五.二.四 使用 count(1) 进行查询
- 在实际开发和学习中,也常常会用 count(1) 的情况。
select count(1) from user u;
- 共有7条数据,与 count(*) 的结果一样。
- 不考虑内部引擎的实现, count(1) 与count(*) 是相同的。
- 建议使用 count(*) 进行查询总的数目。
六. 用函数处理列,查询关于列的其他信息
- 有时候,查询时,并不是只查询列的信息,像直接展示id,name,sex的信息, 而是查询相关联的信息, 如查询name的长度,sex前面加上 ‘性别:’ ,或者用条件函数 进行选择等。 即, 在查询展示时,可以用MySQL的函数对查询列进行处理。
如:
1 .用字符串函数进行拼接 性别,在展示性别前加上 ‘性别是:’
select sex,concat('性别是:',sex) from user u;
2 . 用条件函数 对name 进行判断,如果为null,就展示 暂无姓名,有姓名的话,就展示正常的姓名。
select id,name,if(u.name is null,'暂无姓名',u.name) from user u;
3 . 用数学表达式 处理 age,得到新的数据结果
select id,name,age,age+20 as newAge1,age-20 as newAge2 from user u;