作为过去大学作业的一部分,我被分配了这个嵌套的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 BY
的SELECT DISTINCT
?从本质上讲,SELECT DISTINCT
和GROUP BY
的结果应该是相同的,但我只是不确定在使用HAVING
子句时是否遗漏GROUP BY
。
提前感谢你对这方面的任何见解。
我认为最好的解决方案是:
SELECT G.playerId
FROM Game G
GROUP BY G.playerId
HAVING COUNT(*) > 10;
JOIN
是完全不必要的。如果你想要连接,请使用JOIN
,而不是逗号。