Easy SQL Group-问题.(我是新来的)

Dav*_*vid 1 sql group-by aggregate-functions

我是SQL的新手,所以希望这有一个简单的答案.

我有一个学生表(studentID,name,statusID)和StudentsClasses表(studentID,classID).我被要求从上面的表中创建一个返回以下列的视图:

classID :(分组)

每个班级的学生数量AS学生

statusID = 1作为活动的学生数

statusID = 2的学生数量为非活动人数

我可以轻松地按classID colunm分组并计算学生数量,但我不认为count函数可以被告知只计算某些行.一旦我添加where或having子句,我就会丢失记录,我需要在其他列中计算.我是否需要编写几个不同的查询然后加入每个查询的结果?

感谢您的任何帮助,您可以提供!

-大卫

Dav*_*vid 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
Run Code Online (Sandbox Code Playgroud)