select与gender顺序

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

谢邀,我借助下面这个 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之前

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

select只是标记查询语句,我觉得你问得应该是where和group by的先后顺序,where是先筛选数据,group by是在刷选之后的数据基础之上进行分组的。