gpt4 book ai didi

mysql - 将 SQL ALL 函数与 HAVING COUNT(*) >= 混淆

转载 作者:行者123 更新时间:2023-12-02 19:44:40 28 4
gpt4 key购买 nike

感谢帮助理解查询结果的概念使用全部功能。提前致谢!

带有数据的示例表= 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com