mysql - 表中的人是否满足以下条件
问题描述
我有以下表格:
学生桌
| id | name | gender|
|----|----------|-------|
| 1 | April | F |
| 2 | Jane | F |
| 3 | Joe | M |
| 4 | Mike | M |
项目表
| project_id | student_id | project_name|
|------------|------------|-------------|
| 101 | 1 | Alpha |
| 101 | 2 | Alpha |
| 101 | 3 | Alpha |
| 102 | 2 | M |
| 102 | 4 | M |
| 103 | 1 | Beta |
| 103 | 3 | Beta |
假设有更多的学生和项目 ID。多个学生可以在同一个项目中工作。
我的问题是,有了上面的表格,我如何检查有多少学生一起完成了 2 个或更多项目?所以在上面的例子中,id 为 1 和 3 的学生在项目 Alpha 和 Beta 中一起工作。
到目前为止我的代码是
SELECT * FROM student s
JOIN project s ON student.id = project.project_id
我知道我想通过它们共享的列(即学生 ID)加入这两个表,但我不知道之后该怎么做。我刚开始学习 SQL 一周,希望能得到最大的帮助。
解决方案
使用自联接和聚合:
select p1.student_id, p2.student_id, count(*) as num_projects
from projects p1 join
projects p2
on p1.project_id = p2.project_id and
p1.student_id < p2.student_id
group by p1.student_id, p2.student_id
having count(*) > 1
order by count(*) desc;
推荐阅读
- c++ - Qt 框架中的 QMap 与 QList 类
- sql-server - SSIS ODBC 源更新导致转换错误
- .net - TaskScheduler COM 对象完成后应该如何处理?
- azure - 如何确定 ADFv2 的发布源?
- c# - 有没有共享网页库之类的东西?
- reactjs - 我们在 useEffect 中使用的所有变量都在依赖项数组中吗?
- vb6 - 如何将多个 ioComp Plotx 图打印到 Nova PDF“打印机”?
- arrays - 在节点js中获取二维数组的维度
- django - Django-Rest-Framework 自定义用户没有散列密码(序列化程序问题)
- puppeteer - nodeId 到元素句柄