海螺炒面 2022-09-24 11:25 采纳率: 33.3%
浏览 17
已结题

select与gender顺序

select的字段重命名,group by为啥能给这个重命名字段分组,我只知道可以,忘记啥原因了

  • 写回答

2条回答 默认 最新

  • 削尖的螺丝刀 后端领域新星创作者 2022-09-24 14:27
    关注

    谢邀,我借助下面这个 sql 给你解释一下

    select city , count(*)  as num from staff  where age > 19 group by city having num > = 3;
    

    它的执行顺序是这样的:

    1. 执行where子句查找符合年龄大于19的员工数据

    2. group by子句对员工数据,根据城市分组。

    3. 对group by子句形成的城市组,运行聚集函数计算每一组的员工数量值;

    4. 最后用having子句选出员工数量大于等于3的城市组。

    你要理解的是 group by为啥能给这个重命名字段分组,关键在于你要知道 group by 的时候其实内部是生成了一个 临时的虚拟表,这个就是其背后的核心。这个虚拟表把重复的内容筛选了出来,也就是上的第二部,这一步完成了 根据城市分组

    下面再对上面的使用区别对题主做一个总结:

    1. having子句用于分组后筛选,where子句用于行条件筛选

    2. having一般都是配合group by 和聚合函数一起出现如(count(),sum(),avg(),max(),min())

    3. where条件子句中不能使用聚集函数,而having子句就可以。

    4. having只能用在group by之后,where执行在group by之前

    不知道我的概述,对题主是否有帮助? 如果有的话还望采纳,还没理解可以继续问我,我再给你解答,谢谢 !

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月4日
  • 已采纳回答 9月26日
  • 创建了问题 9月24日

悬赏问题

  • ¥15 安卓C读取/dev/fastpipe屏幕像素数据
  • ¥15 pyqt5tools安装失败
  • ¥15 mmdetection
  • ¥15 nginx代理报502的错误
  • ¥100 当AWR1843发送完设置的固定帧后,如何使其再发送第一次的帧
  • ¥15 图示五个参数的模型校正是用什么方法做出来的。如何建立其他模型
  • ¥100 描述一下元器件的基本功能,pcba板的基本原理
  • ¥15 STM32无法向设备写入固件
  • ¥15 使用ESP8266连接阿里云出现问题
  • ¥15 BP神经网络控制倒立摆