2017-06-02 2 views
0
SELECT d.DEPARTMENT_NAME 
    FROM Department d, 
     Student s 
    WHERE d.DEPARTMENT_ID = s.DEPARTMENT_ID 
GROUP BY d.DEPARTMENT_NAME 
    HAVING COUNT(s.STUDENT_ID) < MAX(COUNT(s.STUDENT_ID)); 

このコードは、学生と部署のテーブルを結合するためのものです。 department_idは学科から学生までの鍵です。最大数の学生ではない部門を探す必要があります。エラーは、グループ機能のネストが深すぎます。ネスティングは3まで許されていませんか?参加とグループを使用して...エラーを返す

はここで正確なエラー

ORA-00935れる:グループ機能は、あまりにも深く

+4

? **正確な**エラーメッセージ(** [編集] **あなたの質問 - ** **投稿コードやコメントに追加情報はありません) –

+0

私はSUMの代わりにCOUNTを使用する必要があると思います質問の一部を持っている –

+0

あなたは遭遇した問題(エラーメッセージ)を投稿してください。 – Susang

答えて

0

UPDをネストされています。ああ、市〜!私はちょうどOracleに関連する質問を述べました。私はrank()関数の構文を知らないが、私はそれが本当にSQL Serverに近いべきだと思う。

ここにある:あなたが使用している[DBMS](https://en.wikipedia.org/wiki/DBMS)

;with Department(DEPARTMENT_ID, DEPARTMENT_NAME) as (
    select 1, 'first' union all 
    select 2, 'second' union all 
    select 3, 'third' 
) 
, Student(STUDENT_ID, DEPARTMENT_ID) as (
    select 1, 1 union all 
    select 2, 2 union all 
    select 3, 2 union all 
    select 4, 2 union all 
    select 5, 3 union all 
    select 6, 3 union all 
    select 7, 3 
) 
, DepOrdered as (
    select 
     d.DEPARTMENT_ID, 
     d.DEPARTMENT_NAME, 
     s.StudentCnt, 
     -- rank departments by the number of students 
     rank() over (order by s.StudentCnt desc) as Rnk 
    from Department d 
    cross apply (
     -- for every department count its students 
     select 
      count(s.STUDENT_ID) StudentCnt 
     from Student s 
     where 
      d.DEPARTMENT_ID = s.DEPARTMENT_ID 
    ) s 
) 
select 
    DEPARTMENT_ID, 
    DEPARTMENT_NAME, 
    StudentCnt 
from DepOrdered 
where 
    -- Rnk = 1 would have all departments with max number of students 
    Rnk > 1 
関連する問題