2016-11-03 34 views
-1
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エラーを示しています。oracleの単一グループ関数のエラー

+0

あなたのテーブルを取得して投稿したいものを教えてください。このクエリは非常に品質が良いです。 – Kacper

+0

[SQLは単一グループのグループ機能ではありません](http://stackoverflow.com/questions/1795198/sql-not-a-single-group-group-function) – Alfabravo

答えて

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)); 
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ごとに1つの行があるので、max(mycount)はmycountとまったく同じになります。

0

lTheエラーは、サブクエリの2番目のレベルで発生します。

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

あなたは集計関数が、無GROUP BYを持っています。

NATURAL JOINを避けることもお勧めします。これは単に起こるのを待っているバグです。結合に使用するキーを非表示にすると、が無効になります。そのため、クエリが理解しにくくなり、エラーが発生しやすくなります。

そして、あなたの質問はかなり難しいです。私はあなたがサンプルデータと希望の結果を提供する別の質問をすることをお勧めします。おそらくこれを表現する簡単な方法があります。

関連する問題