我有一个Oracle数据库考试即将开始,我正在阅读过去的论文来研究它。我无法弄清楚这个问题的答案。问题是:
“写一个SQL语句,列出每个学生的姓名和他们拥有的项目偏好数”
以下是问题的实体关系船图:
到目前为止,我有这段代码
select student.studentname, studentproject.preferenceno
from student
inner join studentproject
on student.studentid = studentproject.studentid
order by student.studentname;
将学生姓名及其偏好逐个打印出来。我似乎无法弄清楚的是如何将每个学生的偏好数量计数显示为旁边有学生姓名的列。当我尝试添加count()时,它只给我一行,其值等于表中的首选项总数,而不是每个学生的首选项总数
以下是我一直致力于http://sqlfiddle.com/#!2/4bc4f1/6
的SQLFiddle任何帮助都非常感谢。提前谢谢!
答案 0 :(得分:2)
应该只是一个计数。问题是有点模糊,然而,按项目计算..整体计数..明显算什么?如果学生没有偏好,我会将联接更改为左联盟。
select student.studentname, count(studentproject.preferenceno)
from student
LEFT join studentproject
on student.studentid = studentproject.studentid
GROUP BY student.studentname
order by student.studentname;
如果计数不同,您的样本数据似乎并不重要。
并且您似乎没有任何没有偏好的学生,因此左侧加入可能在您的样本数据中没有实际意义,但如果您希望每个学生和他们的计数没有任何偏好的学生仍然是学生数为0.