Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
它说的SQL代码中不能有聚合函数(MAX(AVG(winRate)))_Sql - Fatal编程技术网

它说的SQL代码中不能有聚合函数(MAX(AVG(winRate)))

它说的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子句:

这清楚地表明,最大值并不意味着分组

您可能还希望查看显式连接语法,如果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
);

这也更自然地扩展/组合了较大的查询。

您必须将其编写为两个单独的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中添加标记请添加准确的错误消息确实,这应该解决问题=无法嵌套聚合函数。确实,这应该解决问题=无法嵌套聚合函数。