得到编号的正确 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 查询。
我还引入了列别名,因此查询更易于编写和阅读。
会议 看起来像这样:
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 | |
---|---|---|
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 查询。
我还引入了列别名,因此查询更易于编写和阅读。