如何在sql中获得每门课程的学生人数?

时间:2014-09-05 07:52:12

标签: sql count

所以我有这3张桌子:

t_student看起来像这样:

STUDENT_ID| FIRST_NAME  |LAST_NAME
-----------------------------------
1         |  Ivan       | Petrov
2         |  Ivan       | Ivanov
3         |  Georgi     | Georgiev

t_course看起来像这样:

course_id |  NAME       |LECTURER_NAME
-----------------------------------
1         |  Basics     | Vasilev
2         |  Photography| Loyns

t_enrolment看起来像这样:

enrolment_id|   student_fk  |course_fk | Avarage_grade 
-------------------------------------------------------
1           |  1            | 1        |
2           |  3            | 1        |
3           |  4            | 1        |
4           |  2            | 1        | 
5           |  1            | 2        | 5.50
6           |  2            | 2        | 5.40
7           |  5            | 2        | 6.00

我需要选择'声明并提供每门课程的学生人数。结果应该是:

Count_students | Course_name
-----------------------------
4              | Basics
3              | Photography

3 个答案:

答案 0 :(得分:3)

从课程表中选择所有课程,按课程ID加入注册表和分组。使用count(),您可以选择学生人数

    SELECT MAX(t_course.NAME) AS Course_name, COUNT(t_enrolment.student_fk) AS Count_students
    FROM t_course
    LEFT JOIN t_enrolment ON t_enrolment.course_fk = t_course.course_id
    GROUP BY t_course.course_id;

如果您只想在一个课程中选择同一个学生一次(如果可以进行多次注册),您可以使用COUNT(DISTINCT t_enrolment.student_fk)

<强>更新

为了使它不仅在mySQL中工作,我在名称列中添加了一个聚合函数。

根据您使用的SQL数据库,您必须添加引号或反引号。

答案 1 :(得分:0)

这是你的作业吗?

select count(*) Count_students, c.name as course_name from t_enrolment e, t_course c group where e.course_fk = c.course_id  by c.name

答案 2 :(得分:0)

您需要一个带有连接到couse表的select语句(对于Course_name)。按't_course'.name分组以使用COUNT(*)功能

这将有效:

SELECT COUNT(*) AS Count_students, c.NAME AS Course_name 
FROM t_enrolment e
JOIN course c
ON e.course_fk = c.course_id
GROUP BY c.NAME

更多信息

Count function

Group by

Join