select的字段重命名,group by为啥能给这个重命名字段分组,我只知道可以,忘记啥原因了
2条回答 默认 最新
关注 谢邀,我借助下面这个 sql 给你解释一下
select city , count(*) as num from staff where age > 19 group by city having num > = 3;
它的执行顺序是这样的:
执行where子句查找符合年龄大于19的员工数据
group by子句对员工数据,根据城市分组。
对group by子句形成的城市组,运行聚集函数计算每一组的员工数量值;
最后用having子句选出员工数量大于等于3的城市组。
你要理解的是 group by为啥能给这个重命名字段分组,关键在于你要知道 group by 的时候其实内部是生成了一个 临时的虚拟表,这个就是其背后的核心。这个虚拟表把重复的内容筛选了出来,也就是上的第二部,这一步完成了 根据城市分组。
下面再对上面的使用区别对题主做一个总结:
having子句用于分组后筛选,where子句用于行条件筛选
having一般都是配合group by 和聚合函数一起出现如(count(),sum(),avg(),max(),min())
where条件子句中不能使用聚集函数,而having子句就可以。
having只能用在group by之后,where执行在group by之前
不知道我的概述,对题主是否有帮助? 如果有的话还望采纳,还没理解可以继续问我,我再给你解答,谢谢 !
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 安卓C读取/dev/fastpipe屏幕像素数据
- ¥15 pyqt5tools安装失败
- ¥15 mmdetection
- ¥15 nginx代理报502的错误
- ¥100 当AWR1843发送完设置的固定帧后,如何使其再发送第一次的帧
- ¥15 图示五个参数的模型校正是用什么方法做出来的。如何建立其他模型
- ¥100 描述一下元器件的基本功能,pcba板的基本原理
- ¥15 STM32无法向设备写入固件
- ¥15 使用ESP8266连接阿里云出现问题
- ¥15 BP神经网络控制倒立摆