我是新手到SQL之后,我想拿出一个计数,假设有2代表这个例子:SQL计数将两个表
School(schoolID, name,....)
Student(StudentID, SchoolID, ...)
我想:
SELECT COUNT(studentID)
FROM School s, Student t
WHERE s.schooldID = t.schoolID
如何我可以统计所有学校的所有学生吗?
我是新手到SQL之后,我想拿出一个计数,假设有2代表这个例子:SQL计数将两个表
School(schoolID, name,....)
Student(StudentID, SchoolID, ...)
我想:
SELECT COUNT(studentID)
FROM School s, Student t
WHERE s.schooldID = t.schoolID
如何我可以统计所有学校的所有学生吗?
如果你想得到每个学校的计数,你需要一个group by
。此外,通常我们宁愿ANSI风格的加入,因为事实上所有的数据库系统,支持时下他们,他们更容易阅读和维护:
select count(t.studentID)
from Student t
join School s /* added join for your convenience, not necessary here */
on s.schooldID = t.schooldID
group
by t.schoolID
感谢这工作,令人惊讶的是我在我原来的帖子中尝试过的工作,我认为我做错了,但我猜不是。 – user1529412 2015-02-06 15:25:08
我认为这里有一个语法错误,它应该是'开'而不是'开'在哪里 – AdamMc331 2015-02-06 15:38:30
@ McAdam331:谢谢。确实。复制/粘贴... – 2015-02-06 15:39:12
既然你在学生表中的学生证,就不会出现我觉得你需要加入学校。仅仅通过schoolID选择从学生表和组数:
SELECT schoolID, COUNT(*) AS numStudents
FROM student
GROUP BY schoolID;
你需要参加学校的唯一原因是,如果你想其他信息,如学校名称等。如果你只想要学校的学号和学生人数,上面的内容就可以工作。
为了完成最后的想法,可能与您的问题无关。如果你确实想学校的名字,你只是做一个内部联接,并把在SELECT语句,随着数从学生表和组通过学生证依然:在
SELECT s.name, st.COUNT(*) AS numStudents
FROM student st
JOIN school s ON s.id = st.schoolID
GROUP BY s.id;
不是所有的学生都已经学生表?你为什么需要加入学校? – Tallmaris 2015-02-06 15:19:13
因为有很多学校,我想把所有学校的所有学生的总数都计算在内? – user1529412 2015-02-06 15:20:21
你只需要做的是COUNT(STUDENTID)GROUP BY SCHOOLID – 2015-02-06 15:20:30