之前一直搞不明白什么时候用group by
group by故名思意是用来分组时使用的,他会根据你后面跟上的字段将数据分组
这是我创建的一个名为stu1的表
根据一个字段分组:
根据name字段分组,我们name字段的内容只有三种:甲、乙、丙,如果可以输出,结果一定只有三行的
那么我先查询name,结果肯定不会有错的,group by后面的字段也出现在select 后面,这肯定可以啊,我就是根据你进行分组
select name from stu1 group by name
现在给一个错的案例:
通常我们就是没搞清楚这些字段之间的关系,我这里给一个select*
select * from stu1 group by name
报错信息说的是字段依赖不匹配
我们来看看,你的name字段只有3种内容,这3个拎出来就完事了
但是,age字段,id字段下面有多行内容,我根据你的name字段怎么分组?
关系数据库就是基于关系的,单元格中是不允许有多个值,所以select * 报错了
那么我们需要做的就是,先判断group by后数据有多少行,除了group by后面的字段,其他的字段里的数据怎么变成我们想要的行数
通常我们是使用聚合函数将数值内容处理成一行
比如我这里查询id和age的行数
select count(id),count(age),name from stu1 group by name
group by跟上多个字段
就是根据后面2个字段的笛卡尔积来分组
select age,name from stu1 group by name,age;
因为group by通常随之出现聚合函数,所以晒选条件通常是用 having,having 后面跟上的字段可以是表中未出现的,