得到编号的正确 sql 是什么?个别团体的学生?

What will be the correct sql to get the no. of student for individual group?

会议 看起来像这样:

meeting_ID place
1 A
2 B
3 C

study_groups 看起来像这样:

study_group_id meeting_id (fk) topic
1 1 Basics
2 2 Photography
3 1 Film

group_members 看起来像这样:

study_group_id (fk) student_id (fk)
2 10
1 1
2 5
3 15
1 9
3 2
3 11

一个meeting有很多study_groups,每个study_groups有很多students

我想分别查找 meeting_id = 1 每个组中的学生人数。

这是我的 SQL 查询:

SELECT
    study_groups.study_group_id,
    study_groups.topic,
    study_groups.description,
    study_groups.group_member_limit,
    (SELECT COUNT(group_members.student_id)
     FROM group_members, study_groups
     WHERE study_groups.study_group_id = group_members.study_group_id
       AND study_groups.meeting_id = 1) AS no_of_students
FROM 
    study_groups
WHERE 
    study_groups.meeting_id = 1;

这是返回:

study_group_id no_of_student topic
1 5 but want 2 Basics
2 5 but want 3 Photography

请更正我的SQL预期结果。

额外

如果我想在同一查询中查看 student 详细信息(例如:姓名、电子邮件),还请建议我应该怎么做?

其中 student table 是

student_id name email
1 xyz xyz@exmpl.com
2 abc abc@exmpl.com

我想要的结果是:

study_group_id no_of_student topic name
1 5 but want 2 Basics xyz, abc (demo)
2 5 but want 3 Photography abc, xyz (demo)

您不需要子查询。只需在 group_members.student_id 上使用不同的计数并添加一个包含主 select 查询

中所有其他列的语句分组

你在右后方有一个子查询,但你想要一个相关的子查询。这看起来像:

SELECT sg.study_group_id, sg.topic, sg.description, sg.group_member_limit,
       (SELECT COUNT(*)
        FROM group_members gm
        WHERE sg.study_group_id = gm.study_group_id 
       ) AS num_students
FROM study_groups sg
WHERE sg.meeting_id = 1;

查询的重要部分是 study_groups 从子查询中删除,因此子查询引用 outer 查询。

我还引入了列别名,因此查询更易于编写和阅读。