oracle中的单组函数错误

时间:2016-11-03 18:56:33

标签: sql oracle

SELECT name 
FROM instructor natural join teaches
WHERE course_id = (SELECT course_id 
                  FROM (SELECT course_id, MAX(mycount) 
                        FROM (SELECT course_id, count(ID) as mycount 
                              FROM takes GROUP BY course_id)));

此查询在oracle中不起作用。它显示single group function错误。

3 个答案:

答案 0 :(得分:0)

你可以通过

获得更多然后尝试并错过一个组
SELECT name 
FROM instructor natural join teaches
WHERE course_id IN  (SELECT course_id 
              FROM (SELECT course_id, MAX(mycount) 
                    FROM (SELECT course_id, count(ID) as mycount 
                          FROM takes GROUP BY course_id) 
                    GROUP BY course_id));

答案 1 :(得分:0)

你错过了一个小组。 :)

SELECT name FROM instructor 
    natural join teaches 
    WHERE course_id = 
    (SELECT course_id FROM 
        (SELECT course_id, MAX(mycount) FROM 
            (SELECT course_id, count(ID) as mycount FROM takes GROUP BY course_id)
        group by course_ID) -- don't forget this one!
    );

此外,那个外部子查询确实没有做任何事情。您已经为每个course_ID获得了一行,因此max(mycount)将与mycount完全相同。

答案 2 :(得分:0)

l第二级子查询中出现错误:

(SELECT course_id, MAX(mycount) 
 FROM (SELECT course_id, count(ID) as mycount 
       FROM takes
       GROUP BY course_id)
)

您有一个聚合函数,但没有GROUP BY

我还建议你避免NATURAL JOIN。这只是一个等待发生的错误。隐藏用于连接的密钥是一个的东西,这使查询更难理解,更容易出错。

然后,您的查询很难遵循。我建议您提出另一个问题,提供样本数据和预期结果。可能有一种更简单的方式来表达这一点。