在SELECT中不使用聚合函数时,用SELECT DISTINCT替换GROUP BY



作为过去大学作业的一部分,我被分配了这个嵌套的SQL语句:

SELECT DISTINCT P.playerId
FROM Player P
WHERE (
SELECT COUNT(G.id)
FROM Game G
WHERE G.playerId = P.playerId
) >10

任务是打开查询。作为考试的准备,我现在试图再次解决这个任务,并提出了一个类似的解决方案(不是100%确定正确的语法,但我想意图是明确的):

SELECT DISTINCT P.playerId
FROM Player P, Game G
WHERE G.playerId = P.playerId
HAVING COUNT(G.id) >10

然而,官方的解决方案建议这样查询:

SELECT P.playerId
FROM Player P, Game G
WHERE P.playerId = G.playerId
GROUP BY P.playerId
HAVING COUNT(G.id) > 10

所以,我的问题是,这是否只是一种替代解决方案,或者当使用HAVING + aggregate function时,是否不可能有没有GROUP BYSELECT DISTINCT?从本质上讲,SELECT DISTINCTGROUP BY的结果应该是相同的,但我只是不确定在使用HAVING子句时是否遗漏GROUP BY

提前感谢你对这方面的任何见解。

我认为最好的解决方案是:

SELECT G.playerId
FROM Game G
GROUP BY G.playerId
HAVING COUNT(*) > 10;

JOIN是完全不必要的。如果你想要连接,请使用JOIN,而不是逗号。

最新更新