1、分组查询语句 GroupBy+Group_concat
group by 是分组,是分组,是分组,重要的事情说三遍!分组并不是去重,而是分组。
将查询结果按一个或多个进行分组,字段值相同的为一组。
比如:
公司一个部门的为一组,学校班级为一组或者一个年级为一组;
以公司的部门为例:
1 select deparmant, GROUP_CONCAT(`name`) from employee GROUP BY deparmant
这条sql语句的意思是,从employee表中以deparmant为组,查出来一列是deparmant部门、一列是GROUP_CONCAT(`name`)聚合的姓名的数据;
2、分组注意事项
分组注意事项: 在分组时,select后面跟的的字段一般都会出现在 group by 后;
例如:以性别分组写一个sql
1 SELECT gender,GROUP_CONCAT(`name`) from employee GROUP BY gender
这条sql语句的意思是,从employee表中以gender 性别为组,查出来一列是gender性别、一列是GROUP_CONCAT(`name`)聚合的姓名的数据;
3、可以加入函数写sql
1 select deparmant, GROUP_CONCAT(salary), SUM(salary),AVG(salary) 平均工资,MAX(salary) 最高工资 from employee GROUP BY deparmant;
-- 根据department 分组,计算各部门下工资总数,平均工资,最高工资![1532919789347]
再举个例子:
-- 查询每个部门的部门名称以及每个部门工资大于1500的人数
1 SELECT deparmant,GROUP_CONCAT(salary), COUNT(*) from employee WHERE salary > 1500 GROUP BY deparmant
4、SQL分组GroupBy+Having
group by + having 用来分组查询后指定一些条件来输出查询结果
having 和 where 一样,但 having 只能用于 group by
1 -- 查询工资总和大于 9000的部门名称 2 SELECT deparmant, GROUP_CONCAT(salary), SUM(salary) FROM employee 3 GROUP BY deparmant 4 HAVING SUM(salary) > 9000;
having 和 where 的区别:
- having 是在分组后对数据进行过滤,where 是在分组前对数据进行过滤
- having后面可以使用分组函数(统计函数),where后面不可以使用分组函数
- where 是对分组前记录的条件,如果某行记录没有满足where字句的条件,那么这行记录不会参加分组;而having是对分组后数据的约束
5、sql语句书写顺序