HAVING子句

时间:2016-03-17 10:36:14

标签: mysql sql

我试图通过计算每个客户端的命令数并选择命令计数大于或等于所有命令计数的客户端来选择MySQL数据库中的最佳客户端,并使用以下查询:

SELECT client.name, COUNT(*) AS CmdCount
FROM client NATURAL JOIN command
GROUP BY command.idClient
HAVING CmdCount >= ALL (SELECT COUNT(*)
FROM command
GROUP BY command.idClient)

这不起作用且CmdCount值错误:这些值与我删除HAVING子句时获得的值不同。

SELECT client.name, COUNT(*) AS CmdCount
FROM client NATURAL JOIN command
GROUP BY command.idClient

子查询返回预期结果,因此问题来自组合两个请求。以下请求也有效:

SELECT client.name, COUNT(*) AS CmdCount
FROM client NATURAL JOIN command
GROUP BY command.idClient
HAVING CmdCount >= 76

我想知道为什么错误的请求失败以及是否有更好的方法来解决这个问题。

编辑(回复评论): 这是保持关注问题的请求的简化版本,而这在现实世界的应用程序中并未使用。如果我使用INNER JOIN / ON,问题是一样的。至于分组名称的选择,我倾向于认为将具有相同名称的不同客户端分组存在风险(因此选择idClient)。为了保持对我试图理解的行为的关注,我简化了查询,并且可能有一些我缺少的但是它没有像我期望的那样:

SELECT idClient, COUNT(*) AS CmdCount
FROM command
GROUP BY idClient
HAVING CmdCount >= ALL (SELECT COUNT(*)
FROM command
GROUP BY idClient)

0 个答案:

没有答案