【发布时间】:2021-02-26 16:24:43
【问题描述】:
作为过去大学作业的一部分,我收到了以下嵌套 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。
提前感谢您对此的任何见解。
【问题讨论】:
标签: sql group-by query-optimization having unnest