1

私はSQLが初めてなので、これが簡単な答えになることを願っています。

Students テーブル (studentID、name、statusID) と StudentsClasses テーブル (studentID、classID) があります。上記のテーブルから、次の列を返すビューを作成するように依頼されました。

classID: (グループ化)

各クラスの生徒数 AS 生徒

statusID = 1 の学生数 As Actives

statusID = 2 の生徒数

classID列で簡単にグループ化して学生の数を数えることはできますが、count関数に特定の行だけを数えるように指示できるとは思いません。where または having 句を追加するとすぐに、他の列でカウントする必要があるレコードが失われます。いくつかの異なるクエリを作成して、それぞれの結果を結合する必要がありますか?

ご協力いただきありがとうございます。

-デビッド

4

3 に答える 3

7

これは ANSI SQL です (SQL 実装が ANSI 互換である限り機能するはずです)。

SELECT 
 classID,
 COUNT(*) AS "Students",
 SUM(CASE statusID WHEN 1 THEN 1 ELSE 0 END) AS "Actives",
 SUM(CASE statusID WHEN 2 THEN 1 ELSE 0 END) AS "Inactives",
FROM StudentsClasses class
INNER JOIN Students stud ON class.studentID = stud.studentID
GROUP BY classID
于 2010-06-18T18:10:04.457 に答える
1

数える代わりに、いくつかのIIF / CASEステートメントを合計してみませんか?つまり、IIFを使用すると、クエリは次のようになります。

SELECT ClassId, COUNT(*) AS students,
       SUM(IIF(StatusId = 1, 1, 0)) as Actives,
       SUM(IIF(StatusId = 2, 1, 0)) as Inactives
FROM StudentsClasses
INNER JOIN Students ON StudentsClasses.StudentID = Students.StudentID
GROUP BY ClassId
于 2010-06-18T18:02:30.180 に答える
0

このようなステートメントは、クラス ID とその中の生徒数を含む各クラスの行を提供します。

SELECT classID, COUNT(*) AS studentsInClass
    FROM students
    WHERE classID
    IN (SELECT DISTINCT classID FROM students)
    GROUP BY classID

そのWHERE x IN (...)ことは私が学んだばかりです。

他の部分についてはよくわかりません。これをすべて 1 つのテーブルにまとめますか? 入れることはできますがUNION、データが同じではないため、面倒です。

于 2010-06-18T18:18:47.647 に答える