表
| 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 用来分组查询后指定条件来输出查询结果
- having 和 where 一样,但 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是对分组后数据的约束
本文深入探讨了SQL分组查询(Group By)的多种应用,包括Group Concat、聚合函数及Having子句的使用技巧,对比了Where与Having的区别,旨在帮助读者掌握高效的数据分组与分析方法。
409

被折叠的 条评论
为什么被折叠?



