首页 > 解决方案 > 表中的人是否满足以下条件

问题描述

我有以下表格:

学生桌

| 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 一周,希望能得到最大的帮助。

标签: mysqlsqldatabasegroup-bycount

解决方案


使用自联接和聚合:

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;

推荐阅读