获取每个学习小组的学生姓名的查询是什么?
What will be the query to get Student names for every individual study 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
students 看起来像这样:
student_id
name
1
xyz
2
abc
2
pqr
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,
(SELECT COUNT(*)
FROM group_members
WHERE study_groups.study_group_id = group_members.study_group_id) AS no_of_students,
study_groups.topic
FROM
study_groups
WHERE
study_groups.meeting_id = 1;
现在 table 看起来像:
study_group_id
no_of_student
topic
1
2
Basics
2
3
Photography
student_name
下面的列结果是 demo 但我想要这样的数据。
我期望的结果:
study_group_id
no_of_student
topic
student_name
1
2
Basics
xyz, abc, pqr
2
3
Photography
abc, pqr
如果你想要学习组和你正在使用Postgres的同学,你可以将他们聚合成一个数组:
SELECT sgs.study_group_id,
(SELECT ARRAY_AGG(s.name)
FROM group_members gm JOIN
students s
ON gm.student_id = s.student_id
WHERE sg.study_group_id = gm.study_group_id
) AS student_names,
sg.topic
FROM study_groups sg
WHERE sg.meeting_id = 1;
会议 看起来像这样:
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 |
students 看起来像这样:
student_id | name |
---|---|
1 | xyz |
2 | abc |
2 | pqr |
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,
(SELECT COUNT(*)
FROM group_members
WHERE study_groups.study_group_id = group_members.study_group_id) AS no_of_students,
study_groups.topic
FROM
study_groups
WHERE
study_groups.meeting_id = 1;
现在 table 看起来像:
study_group_id | no_of_student | topic |
---|---|---|
1 | 2 | Basics |
2 | 3 | Photography |
student_name
下面的列结果是 demo 但我想要这样的数据。
我期望的结果:
study_group_id | no_of_student | topic | student_name |
---|---|---|---|
1 | 2 | Basics | xyz, abc, pqr |
2 | 3 | Photography | abc, pqr |
如果你想要学习组和你正在使用Postgres的同学,你可以将他们聚合成一个数组:
SELECT sgs.study_group_id,
(SELECT ARRAY_AGG(s.name)
FROM group_members gm JOIN
students s
ON gm.student_id = s.student_id
WHERE sg.study_group_id = gm.study_group_id
) AS student_names,
sg.topic
FROM study_groups sg
WHERE sg.meeting_id = 1;