1

以下は、SQL ジャンキー向けの 1 つです。

学生名と学生登録の 2 つのテーブルがあります。学生は 1 年に 1 ~ 2 回、学位取得の過程で 8 ~ 10 回登録します。現在システムにいるすべての学生 (つまり、2013 年のすべての学生) を取得したいのですが、これは次のように行います。

SELECT studentkey, lastname, firstname, COUNT(year) AS registrations
    FROM  uctProgrammesRegistered 
    LEFT JOIN uctStudents
    ON uctStudents.studentnumber=uctProgrammesRegistered.studentkey
    WHERE programmeregistered='".$programmeCode."' AND year='".$year."' 
    GROUP BY studentkey, lastname, firstname
    ORDER BY studentkey, lastname

これにより、現在の年に登録された回数の結果が得られます。しかし、私が本当に知りたいのは、学生がこれまでに登録した過去数年間の登録回数です。これは、WHERE の year=$year の部分を緩和するだけでは解決できないことに注意してください。現在登録している学生に、このグループの学生が何回登録したかを知りたいだけです。

JOINステートメントを複数回使用すると役立つと思いました(つまり、同じテーブルuctProgrammesRegisteredに別の結合を含めますが、どういうわけか、WHERE programmeregistered = '".$programmeCode."'のみで年チェックを省略します-それは機能しますが、SQLは機能しませんこの考えには賛同できないようです。

4

1 に答える 1

1

これを試して:

Select studentkey, lastname, firstname, 
     Count(*) registrations
From  uctStudents s
   Join uctProgrammesRegistered  r 
       on r.studentkey = s.studentnumber
Where Exists(Select * from uctProgrammesRegistered 
             Where studentkey = s.studentnumber
                 And year='".$year."')
Group By studentkey, lastname, firstname
Order By studentkey, lastname

また ...

Select studentkey, lastname, firstname, 
     Sum(Case when year = 2013 then 1 else 0 end) Registrations2013,
     Count(*) TotalRegistrations
From  uctStudents s
   Join uctProgrammesRegistered  r 
       on r.studentkey = s.studentnumber
Where Exists(Select * from uctProgrammesRegistered 
             Where studentkey = s.studentnumber
                 And year='".$year."')
Group By studentkey, lastname, firstname
Order By studentkey, lastname
于 2013-09-05T08:03:42.157 に答える