作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
感谢帮助理解查询结果的概念使用全部功能。提前致谢!
带有数据的示例表= download employee table script& 这是查询。
select salary, count(*)
from employees
group by salary
having count(*) >= ALL(SELECT count(*) from employees group by salary)
我不明白为什么结果只返回 6 行,计数为 2。
这不应该having count(*) >= ALL(SELECT count(*) from员工组按薪水)
匹配 select sub 和 return 行数 994 之间的每一行?
为什么 >=
返回 6 行,而 =
或 >
返回 0 行?
如果能详细解释其背后的逻辑,我们将不胜感激。谢谢!
最佳答案
关键点是HAVING
子句中的COUNT(*)
是按每个组计算的:
select salary, count(*)
from employees
group by salary
having count(*) >= ALL(SELECT count(*) from employees group by salary)
-- this count changes per each salary
这个查询很奇怪。让我们看一个总共 6 行的简单示例:
salary count
100 3
200 1
300 2
-- per each group
3 >= ALL (3,1,2) -- only this one will match
1 >= ALL (3,1,2)
2 >= ALL (3,1,2)
因此,您的查询实际上将返回薪资最高的行。
while = or > returns 0 rows ?
-- always false for '=' or '>'
3 = ALL (3,1,2)
1 = ALL (3,1,2)
2 = ALL (3,1,2)
关于mysql - 将 SQL ALL 函数与 HAVING COUNT(*) >= 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59508371/
我是一名优秀的程序员,十分优秀!