group by 注意的细节 ,

本文介绍了SQL查询中GROUP BY与HAVING子句的应用方法,包括执行顺序、使用规范及常见错误示例。通过具体案例解析了如何正确使用GROUP BY进行数据分组,并结合HAVING进行进一步的数据过滤。

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

1. GROUP BY子句必须出现在WHERE子句之后,ORDER BY子句之前. HAVING语句必须在ORDER BY子句之后。(where先执行,再groupby分组;groupby先分组,having在执行。)

select T_NAME , T_ADDRESS ,min(rowid)      5                                         
from xuesheng               1 

where   T_AGE >20       2                 

group by  T_NAME, T_PHONE,T_AGE, T_ADDRESS        3
having count(*) > 1)          4

红色数字是执行顺序:

 

2. 除了聚集函数外, SELECT语句中的每个列都必须在GROUP BY子句中给出。count()为聚集函数,T_NAME, T_PHONE,T_BIRTHDAY, T_ADDRESS 在后面groupby中有,所以select后面可有可不有。

(a)正确的:

select T_NAME , T_ADDRESS ,min(rowid)                             ---select语句中的列
from xuesheng
group by T_NAME, T_PHONE,T_BIRTHDAY, T_ADDRESS   ---GROUP BY子句中
having count(*) > 1) 

(b) T_PHONE ,在select 语句中存在,而在group by中不存在,所以会报错。

select T_NAME , T_ADDRESS ,min(rowid)  ,T_PHONE                      ---select语句中的列
from xuesheng
group by T_NAME, T_BIRTHDAY, T_ADDRESS                                    ---GROUP BY子句中
having count(*) > 1) 

3. having 作用的对象是分组出来的对象的相关聚合函数进行的筛选。

 

转载于:https://www.cnblogs.com/brianlai/p/10313106.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值