mysql 聚合函数和分组查询

count():统计指定列不为NULL的记录行数;
max():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
min ():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算
sum():计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
avg ():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
count() 的使用: count() 和 count(1) 都代表所有;
查询employee表中记录数:select count() from employee;
查询员工表中有绩效的人数:select count(performent) from employee;
sum() 的使用:
查询所有雇员月薪和:select sum(salary) from employee;
查询所有雇员月薪和,以及所有雇员绩效和:select sum(salary),sum(parforment) from employee;
查询所有雇员月薪+绩效和:select sum(salary+ifnull(performance,0)) from employee;
avg() 的使用:
统计所有员工平均工资:select avg(salary) from employee;
max() 和 min() 的使用:
查询最高工资和最低工资:select max(salary),min(salary) from employee;
group by 和 group_concat() 分组查询
group by 和 distinct(去重)很像
什么是分组查询?
将查询结果按照1个或者多个字段进行分组,字段值相同的为1组(例如:有10个人,女的站一排,男的站一排,把男女进行分组); 例如:select gender from employee group by gender;
当group by 单独使用时,只显示出每组的第一条记录,所以单独使用group by 的意义不大,
分组注意事项:在使用分组时,select后面直接跟着的字段一般都在出现在group by后 例子1: 对name和gender同时进行分组 例如:select name,gender from employee group by gender,name;
group by + group_concat()
group_concat(字段名):可以作为一个输出字段来使用
表示分组之后,根据分组结果,使用group_concat()来 放置每一组的某字段的值的集合;
例如:在一组里面所有男性名字和女性名字
select gender,group_concat('name') from employee group by gender;
group by + 聚合函数
例如:查看部门平均薪资:selecct department,group_concat(salary),sum(salary) from employee group by department;
例如:查看每个部门的最高薪资:select department,group_concat(salary),max(salary) from employee group by department;
例如:查询每个部门的部门名称以及每个部门工资大于1500的人数 select name,salary from employee where salary>1500;
group by + having
用分组查询后指定一些条件来输出查询结果,having作用和where一样,但是having只能用于group by
HAVING和WHERE的区别?
(1).having是在分组后对数据进行过滤,where是在分组前对数据进行过滤;
(2).having后面可以使用分组函数(统计函数),where后面不可以使用分组函数;
(3).where是对分组前记录的条件,如果某行记录没有满足where子语句的条件,那么这行记录不参与分 组;having是对分组后的数据约束;
书写顺序:select --> from --> where --> group by --> having --> order by --> limit
执行顺序:from => where => group by => having => select => order by => limit
分页 LIMIT
从哪一行开始查,总共要查几行
LIMIT 参数1, 参数2
参数1:从哪一行开始查
参数2:一共要查几行,角标是从0开始
格式:select * from 表名 limit 0,5;

你可能感兴趣的:(mysql 聚合函数和分组查询)