sql - 什么是正确的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 ) |
解决方案
您在右侧有一个子查询,但您想要一个相关的子查询。这看起来像:
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
是从子查询中删除,因此子查询引用外部查询。
我还引入了列别名,以便查询更易于编写和阅读。
推荐阅读
- facebook - 在 Facebook 登录官方示例中使用范围
- java - Java 9、拼图和自动模块
- arrays - Firestore - 将数据附加到结构内的单个值
- ruby-on-rails - 在使用不同的应用程序一段时间后,Rails 应用程序无法连接到 postgres
- ubuntu - Oh-my-zsh Powerline 主题终端颜色在 IntelliJ 上未正确显示
- javascript - 将对象数组转换为具有 lodash 值的分组对象
- node.js - 为什么当我在 NodeJS 中导入护照时没有从 MongoDB 获取数据
- javascript - ajax停止后模态不隐藏
- javascript - 选择选项组件后Vuejs更改组件中的prop值
- javascript - 如果用户将光标拖离 div,如何使“onmouseup”起作用