lesson 5:Group Function
group by :在查询表中数据的时候进行分组的关键字
having :分组之后的进行进一步数据筛选的关键字(having和where的功能类似)
note:
①组函数可以出现的位置: select子句和having 子句
②使用group by 是将所有行划分成若干小组。
③having子句用来限制组结果的返回。
语法:
select ...
from ...
where ...
group by col_name,col_name
having ...
order by...
group by col_name:将数据按照col_name相同值进行分组
注:除了select和from之外其他的都不是必须的。
假如select..from..后面的语句都出现了,那么他们的执行顺序为:
where-->group by分组-->执行组函数-->having筛选->order by
组函数常见有7个:
avg:求平均值
count:求总数
max:最大值
min:最小值
sum:求和
stddev 标准差
variance 方差
avg([distinct] column ),sum([distinct] column) :可以作用在存储数字数据的列上。
max(),min():可以作用在任意类型的数据之上。
对字符型数据的最大值,是按照首字母由A~Z的顺序排列,越往后,其值越大。当然,对于汉字则是按照其全拼拼音排列的,若首字符相同,则比较下一个字符,以此类推。
count([distinct] column | *) :
count(*) : 统计表中所有的行数
count(column) : 返回所有非空行的行数
组函数出现的位置: ①select后面 ②having后面 ③order by后面
④where后面一定【不能】出现组函数
注意:如果select/having语句后面出现了组函数,那么select/having后面没有被组函数修饰的列,就必须出现在group by 后面
where和having对比:
①where和having都是做条件筛选的
②where执行的时间比having要早
③where后面不能出现组函数,having后面可以出现组函数
④where语句要紧跟from后面,having语句要紧跟group by后面
group by和having的关系:
①group by可以单独存在,后面可以不出现having语句
②having不能单独存在,有需要的话,必须出现在group by后面
order by语句
①如果sql语句中需要排序,那么就一定要写在sql语句的最后面
②order by后也可以出现组函数
1)使用组函数:不结合group分组使用(如果不使用group分组的话,那么默认当前查询到的所有数据是一组)
例如: 查询s_emp表中所有员工的平均工资
select avg(salary) from s_emp;
查询s_emp表中共有多少条数据
select count(*) from s_emp;
查询s_emp表中所有员工中的最大工资
select max(salary) from s_emp;
查询s_emp表中所有员工中的最小工资
select min(salary) from s_emp;
查询s_emp表中所有员工的工资总和
select sum(salary) from s_emp;
查询s_emp表中所有员工的工