SQL是先运行select还是先运行having子句?

作者站长头像
站长
· 阅读数 17

SQL语句中到底是先select执行后having还是先having执行再select执行呢?如下图所示,这是表数据:SQL是先运行select还是先运行having子句?

然后这是代码及运行结果:SQL是先运行select还是先运行having子句?

网上的答案是先执行having后执行select,但是上面第二幅图不是先在select中指定了“sum(num) as all_num”后,才能运行“having all_num > 50”吗,不然怎么会运行成功呢?我的疑问是如果是先havingselect的话,你哪里来的all_numhaving执行呢?不是应该先select查询出结果才有all_num,再运行having子句吗?

希望有人能解答我的疑惑

回复
1个回答
avatar
test
2024-06-19
但是上面第二幅图不是先在select中指定了“sum(num) as all_num”后,才能运行“having all_num > 50”吗,不然怎么会运行成功呢?

你说的没错,我觉得你只是混淆了select的作用。这里的select的意思是做完having子组筛选后把结果选择出来展示,而不是对数据作操作拿给having去做子组筛选我们理一下顺序:1.group by先分组2.sum()聚合函数执行算出每个组的总和(它不依赖于select这个动作) 3.having子句对子组总和结果作筛选4.select把结果选择性展示出来

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容