sql 分组查询

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语句书写顺序

 

posted @ 2021-12-17 16:15  之鹿喵  阅读(7254)  评论(0编辑  收藏  举报