Oracle SQL:对于每个班级,列出每个专业的学生人数

时间:2016-10-09 16:12:06

标签: sql database oracle relational-database

我正在参加一个数据库管理课程,虽然我一直在为本周的作业做准备,但我已经坚持了几天的最后一个问题:“对于每个课程,列出每个课程中有多少学生major。列出班级名称,专业和学生人数。“架构如下:

<div class="wrapper-inline-block">
  <div class="left-column">
    <p>Float</p>
  </div>
  Non-float
</div>

<hr>

<div class="wrapper">
  <div class="left-column">
    <p>Float</p>
  </div>
  Non-float
</div>

我已经弄清楚如何为单个类运行此查询:

Student(*snum:* integer, *sname:* string, *major:* string, *level:* string, *age:* integer)
Class(*name:* string, *meets_at:* time, *room:* string, *fid:* integer)
Enrolled(*snum:* integer, *cname:* string)
Faculty(*fid:* integer, *fname:* string, *deptid:* integer)

我尝试执行以下查询,但内部查询没有c1的任何上下文,所以我不知道从哪里开始:

SELECT s.major, COUNT(s.snum)
FROM class c, student s, enrolled e
WHERE c.name=e.name AND s.snum=e.snum AND c.name='Class Name'
GROUP BY s.major;

那我该怎么做?

1 个答案:

答案 0 :(得分:0)

尝试在ClassSelect

中添加Group by名称
SELECT c1.NAME,
       s.major,
       Count(s.snum)
FROM   class c
       INNER JOIN enrolled e
               ON c.NAME = e.NAME
       INNER JOIN student s
               ON s.snum = e.snum
GROUP  BY s.major,
          c1.NAME 

正如Gordan的评论中所提到的,开始使用INNER JOIN语法,它比旧式逗号分隔加入更具可读性