本文已参与「新人创作礼」活动,一起开启掘金创作之路
本章会对聚合函数、分组查询和排序查询进行学习和总结。
一、聚合函数
(1) 简介
所谓聚合函数,就是将一列数据作为一个整体,进行纵向计算。
(2) 常见的聚合函数
函数 | 功能 |
---|---|
count | 统计数量 |
max | 最大值 |
min | 最小值 |
avg | 平均值 |
sum | 总和 |
(3) 语法
SELECT 聚合函数(字段列表) FROM 表名 ;
注意 : NULL值是不参与所有聚合函数运算的。
案例一:统计该企业员工数量
select count(*) from emp; -- 统计的是总记录数
# or
select count(idcard) from emp; -- 统计的是idcard字段不为null的记录数
对于count聚合函数,统计符合条件的总记录数,还可以通过 count(数字/字符串)的形式进行统计查询:
select count(1) from emp;
案例二:统计该企业员工的平均年龄
select avg(age) from emp;
案例三:统计该企业员工的最大年龄
select max(age) from emp;
案例四:统计该企业员工的最小年龄
select min(age) from emp;
案例四:统计西安地区员工的年龄之和
select sum(age) from emp where workaddress = '西安';
二、分组函数
(1)语法:
SELECT 字段列表 FROM 表名 [ WHERE 条件 ] GROUP BY 分组字段名 [HAVING 分组后过滤条件];
(2) 在这里,要注意where和havaing的区别:
① 执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。
②判断条件不同:where不能对聚合函数进行判断,而having可以。
注意:
1.分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义。
2.执行顺序: where > 聚合函数 > having 。
3.支持多字段分组, 具体语法为 : group by columnA,columnB
案例一:根据性别分组,统计男性员工和女性员工的数量。
-- 思路:count(*)
select gender, count(*) from emp group by gender ;
案例二:根据性别分组 , 统计男性员工 和 女性员工的平均年龄。
-- 思路:avg(age)
select gender, avg(age) from emp group by gender ;
案例三:查询年龄小于45的员工 , 并根据工作地址分组 , 获取员工数量大于等于3的工作地址。
-- 思路:having address_count>=3
select workaddress, count(*) address_count from emp where age < 45 group by workaddress having address_count >= 3;
案例四:统计各个工作地址上班的男性及女性员工的数量。
-- 思路:count(*) '数量'
select workaddress, gender, count(*) '数量' from emp group by gender , workaddress;
三、排序查询
排序在日常开发中是非常常见的一个操作,有升序排序,也有降序排序。
应用场景:在某商城中价格的升序与降序等业务场景。
(1) 语法:
SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1 , 字段2 排序方式2 ;
(2) 排序方式
排序方式分为两种:升序--ASC(默认值) 和 降序--DESC
注意事项:
① 如果是升序, 可以不指定排序方式ASC ;
② 如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序;
案例一:根据年龄对公司的员工进行升序排序。
select * from emp order by age asc;
# or
select * from emp order by age;
案例二:根据入职时间, 对员工进行降序排序。
select * from emp order by entrydate desc;
案例三:根据年龄对公司的员工进行升序排序 , 年龄相同 , 再按照入职时间进行降序排序。
select * from emp order by age asc , entrydate desc;
四、小结
下一章是数据查询语言最后一章,会分别对分页查询语法及其案例和执行顺序进行归纳总结。