首页 > 解决方案 > 什么是正确的sql来获得否。个别组的学生?

问题描述

会议看起来像这样:

会议ID 地方
1 一个
2
3 C

study_groups看起来像这样:

study_group_id meeting_id (fk) 话题
1 1 基本
2 2 摄影
3 1 电影

group_members看起来像这样:

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

Ameeting有很多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 话题
1 5 但想要2 基本
2 5 但想要3 摄影

请更正我的 SQL 以获得预期的结果。

额外的

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

student桌子在哪里

学生卡 姓名 电子邮件
1 xyz xyz@exmpl.com
2 美国广播公司 abc@exmpl.com

我希望结果为:

study_group_id no_of_student 话题 姓名
1 5 但想要2 基本 xyz, abc ( demo)
2 5 但想要3 摄影 abc, xyz ( demo)

标签: sqlpostgresqlforeign-keysmultiple-tables

解决方案


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

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是从子查询中删除,因此子查询引用外部查询。

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


推荐阅读