首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MySQL中从两个表中选择计数

在MySQL中从两个表中选择计数
EN

Stack Overflow用户
提问于 2014-11-21 16:39:19
回答 2查看 425关注 0票数 4

我有两张桌子,学生和课程。

学生有下列栏:

代码语言:javascript
复制
SID INTERGER
NAME VARCHAR
DEPARTMENT INTEGER
REGISTRATIONDATE DATE

课程有以下各栏:

代码语言:javascript
复制
CID INTERGER
SID INTERGER
ENROLLEDATE 

我想得到每个注册日期的学生总数,按部门分列,也要得到该注册日的每门课程的注册学生人数,这些数据可以由REGISTRATIONDATE和REGISTRATIONDATE + 28之间的ENROLLEDATE确定。

如果我的输入数据是:

代码语言:javascript
复制
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并不是正确的,

代码语言:javascript
复制
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;

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-21 16:53:32

尝尝这个。使用Conditional Aggregate逻辑查找StudentInCourseCount。更新: Osa是对的,它应该是不同的计数。

代码语言:javascript
复制
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 
票数 1
EN

Stack Overflow用户

发布于 2014-11-21 17:06:50

小的改变到上面。您想要对学生进行不同的计数,然后离开外部连接,以使学生在课程中计数时为零。

代码语言:javascript
复制
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.DEPARTMENT
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27066170

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档