SQL语句-分组查询

sno s_name gender speciality
1001 张三 计算机
1002 李四 计算机
1003 王五 会计
1004 赵六 物流管理
1005 麦赖 商务英语
1006 孙七 物流管理
1007 周八 物联网
1008 吴九 通信工程
1009 郑十 网络工程

分组查询GroupBy+Group_concat

在数据库中,通过 group by 将查询结果按照1个或多个字段进行分组,字段值相同的为一组
Group_concat可以将分组的结果保存成集合

  • 根据speciality分组,查看每组里的姓名
  • 代码示例:
    SELECT speciality, GROUP_CONCAT(s_name) FROM students GROUP BY speciality;
    

运行结果:
在这里插入图片描述

  • 根据gender分组,查看每组里的姓名
  • 代码示例:
SELECT gender, GROUP_CONCAT(s_name) FROM students GROUP BY gender;

运行结果:
在这里插入图片描述

分组查询+聚合函数

根据speciality分组,使用聚合函数count()计算组里的人数
代码示例:

SELECT speciality, GROUP_CONCAT(s_name), COUNT(*) FROM students GROUP BY speciality;

运行结果:
在这里插入图片描述

分组查询+having

  • having 用来分组查询后指定条件来输出查询结果
  • havingwhere 一样,但 having 只能作用于 group by

根据speciality分组,查看性别为男的信息
代码示例:

SELECT speciality, gender, GROUP_CONCAT(s_name), COUNT(*) FROM students
GROUP BY speciality,gender
HAVING gender='男';

运行结果:
在这里插入图片描述
注意: having后面存在的字段必须含在分组筛选后的数据里

where和having的区别

having 和 where 的区别:

  • where是在分组前对数据过滤,having是在分组后对数据过滤
  • having后面可以接聚合函数,where不行
  • where是对分组前记录的条件,如果某行记录没有满足where子句的条件,那么这行记录不会参加分组;而having是对分组后数据的约束

猜你喜欢

转载自blog.csdn.net/weixin_44604586/article/details/107535857