好吧,我想答案在某个地方,但我找不到。。。
(甚至我的头衔也不好)
简而言之,我想从一个关联表的一部分得到最少的组数
首先,请记住这已经是一个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制定课程。
第二个查询
既然我已经上了这些课程,我想再上两门课,即3250,课程表如下:
+--------------------+
|id_course|id_teacher|
+--------------------+
|   32    |    1     |
|   32    |    12    |
|   50    |    12    |
+--------------------+

我的问题是:对于身份证课程N,我需要再找一个老师吗?
我想逐道检查,所以“检查32道”,不需要同时检查许多道
我认为最好的方法是从第一个查询开始计算一个内部连接,其中包含一个排名最低的教师列表,因此使用我们的数据我们只得到了两个:Teacher(1, 4)
对于这门课,老师不做这个,但是和老师一样,我不需要另找一个老师。
对于课程32,唯一要做的老师是教师12,因此我在选择的老师中找不到匹配的老师,我必须再找一个(这些数据总共有两个)
这是一个基础[SQLFiddlemysql - 最少按不同分组-SQL-LMLPHP
祝你好运,布拉格

最佳答案

你想得到一个唯一的身份证老师的计数和最少的然后。。。获取不同的计数并将结果限制为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就足够了?

10-08 03:17