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子句,我就会丢失记录,我需要在其他列中计算.我是否需要编写几个不同的查询然后加入每个查询的结果?
感谢您的任何帮助,您可以提供!
-大卫
这是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)