2015-02-06 45 views
-1

我是新手到SQL之后,我想拿出一个计数,假设有2代表这个例子:SQL计数将两个表

School(schoolID, name,....) 
Student(StudentID, SchoolID, ...) 

我想:

SELECT COUNT(studentID) 
FROM School s, Student t 
WHERE s.schooldID = t.schoolID 

如何我可以统计所有学校的所有学生吗?

+1

不是所有的学生都已经学生表?你为什么需要加入学校? – Tallmaris 2015-02-06 15:19:13

+0

因为有很多学校,我想把所有学校的所有学生的总数都计算在内? – user1529412 2015-02-06 15:20:21

+1

你只需要做的是COUNT(STUDENTID)GROUP BY SCHOOLID – 2015-02-06 15:20:30

回答

2

如果你想得到每个学校的计数,你需要一个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 
+0

感谢这工作,令人惊讶的是我在我原来的帖子中尝试过的工作,我认为我做错了,但我猜不是。 – user1529412 2015-02-06 15:25:08

+1

我认为这里有一个语法错误,它应该是'开'而不是'开'在哪里 – AdamMc331 2015-02-06 15:38:30

+1

@ McAdam331:谢谢。确实。复制/粘贴... – 2015-02-06 15:39:12

3

既然你在学生表中的学生证,就不会出现我觉得你需要加入学校。仅仅通过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;