group by 用法

本文详细介绍了SQL中的groupby语句及其应用。通过实例展示了如何根据特定字段进行分组,并解释了为何在使用groupby时不能直接使用select*。还探讨了聚合函数如count()在分组查询中的作用,以及如何处理分组后其他字段的数据行数问题。同时,提到了使用having子句来过滤聚合后的结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前一直搞不明白什么时候用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 后面跟上的字段可以是表中未出现的,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值