好吧,我想答案在某个地方,但我找不到。。。
(甚至我的头衔也不好)
简而言之,我想从一个关联表的一部分得到最少的组数
首先,请记住这已经是一个5表(+1k行)连接、筛选和分组的结果,我将不得不在一个强大得像香蕉一样的prod服务器上运行很多次。。。
第二,这是一个假案,你知道我的问题
经过一些查询,我得到了以下数据结果:
+--------------------+
|id_course|id_teacher|
+--------------------+
| 6 | 1 |
| 6 | 4 |
| 6 | 14 |
| 33 | 1 |
| 33 | 4 |
| 34 | 1 |
| 34 | 4 |
| 34 | 10 |
+--------------------+
如你所见,我有三门课,最多三个老师教。我需要参加每门课程中的一门,但我想要尽可能少的不同的老师(我很害羞…)。
我的第一个问题
应该回答:每门课我需要的老师最少是多少?
有了这些数据,这是一个
1
,因为教师1或教师4为这3个1制定课程。第二个查询
既然我已经上了这些课程,我想再上两门课,即
32
和50
,课程表如下:+--------------------+
|id_course|id_teacher|
+--------------------+
| 32 | 1 |
| 32 | 12 |
| 50 | 12 |
+--------------------+
我的问题是:对于身份证课程N,我需要再找一个老师吗?
我想逐道检查,所以“检查32道”,不需要同时检查许多道
我认为最好的方法是从第一个查询开始计算一个内部连接,其中包含一个排名最低的教师列表,因此使用我们的数据我们只得到了两个:
Teacher(1, 4)
。对于这门课,老师不做这个,但是和老师一样,我不需要另找一个老师。
对于课程
32
,唯一要做的老师是教师12,因此我在选择的老师中找不到匹配的老师,我必须再找一个(这些数据总共有两个)这是一个基础[SQLFiddle
祝你好运,布拉格
最佳答案
你想得到一个唯一的身份证老师的计数和最少的然后。。。获取不同的计数并将结果限制为1条记录。
所以也许有点像。。。
SELECT count(Distinct ID_Teacher), Group_concat(ID_Teacher) as TeachersIDs
FROM Table
WHERE ID_Course in ('Your List')
ORDER BY count(Distinct ID_Teacher) ASC Limit 1
然而,这将随机选择是否存在领带…那么,你想提供选择哪一组教师和班级应该存在联系的选项吗?也就是说,要完成所有涉及相同数量教师的课程,有多种途径。。。例如A,B和A,C老师完成了所有的必修课。。。。两个记录都应该返回结果还是1就足够了?