我有两张桌子,学生和课程。
学生有下列栏:
SID INTERGER
NAME VARCHAR
DEPARTMENT INTEGER
REGISTRATIONDATE DATE课程有以下各栏:
CID INTERGER
SID INTERGER
ENROLLEDATE 我想得到每个注册日期的学生总数,按部门分列,也要得到该注册日的每门课程的注册学生人数,这些数据可以由REGISTRATIONDATE和REGISTRATIONDATE + 28之间的ENROLLEDATE确定。
如果我的输入数据是:
STUDENT:
1,John,CS,11/01/2014
2,Jim,CS,11/01/2014
3,Jane,LAW,10/01/2014
4,Rose,Engineering,11/01/2014
COURSE:
1,1,11/10/2014
1,2,11/11/2014
2,3,11/11/2014
OUTPUT:
StudentCount,Department,RegistrationDate,StudentInCourseCount
2,CS,11/01/2014,2
1,LAW,10/01/2014,1
1,Engineering,11/01/2014,StudentCount =每个注册日在某系注册的学生人数
部门=部门名称
RegistrationDate =每个唯一注册期
StudentInCourseCount =每门课程中的学生数量,在每门课程中,在REGISTRATIONDATE和REGISTRATIONDATE + 28之间
注意:输出中最后一行的StudentInCourseCount是空的,因为Rose没有参加任何课程。
我已经尽力解释清楚了。
这是我的尝试,但StudentInCourseCount并不是正确的,
SELECT COUNT(sd.SID) As STUDENTCOUNT,sd.DEPARTMENT,sd.REGISTRATIONDATE,
(
SELECT COUNT(p.SID)
FROM COURSE p
WHERE sd.SID=p.SID AND p.ENROLLDATE BETWEEN sd.REGISTRATIONDATE AND sd.REGISTRATIONDATE+28
) AS StudentInCourseCount
FROM STUDENT sd
GROUP BY DEPARTMENT,REGISTRATIONDATE
ORDER BY REGISTRATIONDATE DESC;谢谢。
发布于 2014-11-21 16:53:32
尝尝这个。使用Conditional Aggregate逻辑查找StudentInCourseCount。更新: Osa是对的,它应该是不同的计数。
SELECT Count(DISTINCT s.SID) STUDENTCOUNT,
sd.DEPARTMENT,
sd.REGISTRATIONDATE,
Count(CASE
WHEN ENROLLDATE BETWEEN REGISTRATIONDATE AND REGISTRATIONDATE + 28 THEN 1
END) StudentInCourseCount
FROM STUDENT S
LEFT JOIN COURSE C
ON S.SID = C.SID
GROUP BY DEPARTMENT,
REGISTRATIONDATE 发布于 2014-11-21 17:06:50
小的改变到上面。您想要对学生进行不同的计数,然后离开外部连接,以使学生在课程中计数时为零。
SELECT COUNT(DISTINCT s.SID) StudentCount
,s.DEPARTMENT
,s.REGISTRATIONDATE
,COUNT(CASE
WHEN c.ENROLLDATE BETWEEN REGISTRATIONDATE AND REGISTRATIONDATE + 28 THEN 1
END) StudentInCourseCount
FROM STUDENT s LEFT OUTER JOIN
COURSE c ON s.SID = c.SID
GROUP BY s.REGISTRATIONDATE, s.DEPARTMENThttps://stackoverflow.com/questions/27066170
复制相似问题