所以我有这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
答案 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
更多信息