它说的SQL代码中不能有聚合函数(MAX(AVG(winRate)))
您必须将其写成两个单独的SELECT子句: 这清楚地表明,最大值并不意味着分组 您可能还希望查看显式连接语法,如果RDBMS支持,请查看窗口聚合以避免重复查询 如果您的DB支持,我更喜欢这样:它说的SQL代码中不能有聚合函数(MAX(AVG(winRate))),sql,Sql,您必须将其写成两个单独的SELECT子句: 这清楚地表明,最大值并不意味着分组 您可能还希望查看显式连接语法,如果RDBMS支持,请查看窗口聚合以避免重复查询 如果您的DB支持,我更喜欢这样: SELECT Teams_ID FROM Players P, Heros H WHERE P.Heros_ID = H.ID GROUP BY Teams_ID HAVING AVG(winRate)=( SELECT MAX(avgWinRate) FROM (SELECT AVG(w
SELECT Teams_ID
FROM Players P, Heros H
WHERE P.Heros_ID = H.ID
GROUP BY Teams_ID
HAVING AVG(winRate)=(
SELECT MAX(avgWinRate)
FROM (SELECT AVG(winRate) as avgWinRate
FROM Players P, Heros H
WHERE P.Heros_ID = H.ID
GROUP BY Teams_ID
) as t
);
这也更自然地扩展/组合了较大的查询。您必须将其编写为两个单独的SELECT子句: 这清楚地表明,最大值并不意味着分组 您可能还希望查看显式连接语法,如果RDBMS支持,请查看窗口聚合以避免重复查询 如果您的DB支持,我更喜欢这样:
SELECT Teams_ID
FROM Players P, Heros H
WHERE P.Heros_ID = H.ID
GROUP BY Teams_ID
HAVING AVG(winRate)=(
SELECT MAX(avgWinRate)
FROM (SELECT AVG(winRate) as avgWinRate
FROM Players P, Heros H
WHERE P.Heros_ID = H.ID
GROUP BY Teams_ID
) as t
);
这也更自然地扩展/组合了较大的查询。首先,您应该使用正确、明确、标准的联接语法编写查询,并限定所有列引用 然后,您可以使用ORDER BY和一些限制子句来执行您想要的操作:
select *
from (
select *,ROW_NUMBER() OVER (ORDER BY AvgWinRate desc) rn
from (
SELECT Teams_ID,AVG(winRate) OVER (PARTITION BY Teams_ID) as AvgWinRate
FROM Players P inner join Heros H
ON P.Heros_ID = H.ID
) t
) u
where rn = 1
那个?用于别名指定列的来源。并非所有数据库都支持fetchfirst1行,但都有一些限制结果集的机制
如果即使在打成平局的情况下也只需要一行,则可以执行以下操作:
SELECT ?.Teams_ID
FROM Players P JOIN
Heros H
ON P.Heros_ID = H.ID
GROUP BY ?.Teams_ID
HAVING AVG(?.winRate) = (SELECT AVG(?.winRate)
FROM Players P JOIN
Heros H
ON P.Heros_ID = H.ID
GROUP BY ?.Teams_ID
ORDER BY AVG(?.winRate) DESC
FETCH FIRST 1 ROW ONLY
);
首先,您应该使用正确、明确、标准的联接语法编写查询,并限定所有列引用 然后,您可以使用ORDER BY和一些限制子句来执行您想要的操作:
select *
from (
select *,ROW_NUMBER() OVER (ORDER BY AvgWinRate desc) rn
from (
SELECT Teams_ID,AVG(winRate) OVER (PARTITION BY Teams_ID) as AvgWinRate
FROM Players P inner join Heros H
ON P.Heros_ID = H.ID
) t
) u
where rn = 1
那个?用于别名指定列的来源。并非所有数据库都支持fetchfirst1行,但都有一些限制结果集的机制
如果即使在打成平局的情况下也只需要一行,则可以执行以下操作:
SELECT ?.Teams_ID
FROM Players P JOIN
Heros H
ON P.Heros_ID = H.ID
GROUP BY ?.Teams_ID
HAVING AVG(?.winRate) = (SELECT AVG(?.winRate)
FROM Players P JOIN
Heros H
ON P.Heros_ID = H.ID
GROUP BY ?.Teams_ID
ORDER BY AVG(?.winRate) DESC
FETCH FIRST 1 ROW ONLY
);
您可以使用聚合函数的anggregate:MAXAVG。。。不允许请在DBMS中添加一个标记请添加确切的错误消息您可以使用聚合函数的anggregate:MAXAVG。。。不允许请在DBMS中添加标记请添加准确的错误消息确实,这应该解决问题=无法嵌套聚合函数。确实,这应该解决问题=无法嵌套聚合函数。