SQL是先运行select还是先运行having子句?
SQL语句中到底是先select执行后having还是先having执行再select执行呢?如下图所示,这是表数据:
然后这是代码及运行结果:
网上的答案是先执行having
后执行select
,但是上面第二幅图不是先在select
中指定了“sum(num) as all_num”
后,才能运行“having all_num > 50”
吗,不然怎么会运行成功呢?我的疑问是如果是先having
再select
的话,你哪里来的all_num
给having
执行呢?不是应该先select
查询出结果才有all_num
,再运行having
子句吗?
希望有人能解答我的疑惑
回复
1个回答

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把结果选择性
展示出来
回复

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