3

これが私のテーブルです

 Student (sname, sid, gpa, level, deptno) 
 Course (cno, cname, deptno, units) 
 Dept (dname, deptno) 
 Takes (sid, cno) 

学科内よりも学科外でより多くのコースを受講した学生の名前 (つまり、snames) を返す SQL クエリを作成します。データベース内のすべての学生が、学科内で少なくとも 1 つのコースを受講したと仮定できます。

この質問に対する解決策は探していませんが、回答は歓迎します。しかし、このような複雑なクエリを作成する手順を生成する方法を人々が教えてくれることを願っています..

私の答えは

 Select S.sname
 From Student S, Course C, Dept D, Takes T
 Where T.cno=C.cno and D.deptno=C.deptno and S.sid = T.sid
 Having COUNT(S.deptno=C.deptno) > COUNT( S.deptno != C.deptno)

このように HAVING の後にカウントを使用できるかどうかはわかりません。ありがとう

4

3 に答える 3

2

DB / SQLクラスを受講したことがないにもかかわらず、適度に複雑なSQLクエリを頻繁に使用し、クエリを生成する最良の方法は一度に1つずつ作業することです. たとえば、最初に学生のリストを取得します。次に、彼らが学科の内外で取得したクラスの数を調べ、最後に、クエリ内の 2 つの値を比較して、必要な最終的な結果セットを返します。

tl;dr: ベイビーステップ

于 2012-10-31T20:02:34.507 に答える
2

誰かがこれはハードだと思っていましたが、標準的な解決策は次のとおりです。

 SELECT S.sname from Student S
 WHERE (SELECT COUNT (*) 
 FROM Takes T, Course C
 WHERE S.sid = T.sid AND T.cno = C.cno AND C.deptno = S.deptno)
 < (SELECT COUNT(*)
 FROM Takes T2, Course C2
 WHERE S.sid = T2.sid AND T2.cno = C2.cno AND C2.deptno != S.deptno)
于 2012-10-31T20:08:46.870 に答える
1

あなたの最初の試み、修正:

 SELECT S.sname
 FROM Student S, Course C, Dept D, Takes T
 WHERE T.cno = C.cno AND D.deptno = C.deptno AND S.sid = T.sid
 GROUP BY S.sid
 HAVING COUNT(CASE WHEN S.deptno =  C.deptno THEN 1 ELSE NULL END) 
      < COUNT(CASE WHEN S.deptno <> C.deptno THEN 1 ELSE NULL END) ;

SQL-92 構文に変換されます。

 SELECT S.sname
 FROM Student S 
   JOIN Takes T   ON S.sid = T.sid
   JOIN Course C  ON T.cno = C.cno
   JOIN Dept D    ON D.deptno = C.deptno
 GROUP BY S.sid        
        , S.sname                  --- this is not needed in SQL-2003
                                   --- but still required by most DBMS     
 HAVING 
        COUNT(CASE WHEN S.deptno =  C.deptno THEN 1 END) 
      < COUNT(CASE WHEN S.deptno <> C.deptno THEN 1 END) ;

                                   --- the ELSE NULL is not needed either
                                   --- it's the implied default
于 2012-10-31T20:17:27.093 に答える