SQLServer选择跨两个字段查询GROUP BY HAVING

时间:2017-06-17 00:52:30

标签: sql sql-server group-by

这可能很简单,但我还没有得到它。我是通过sql查询对该组的新手,但对sql选择有基本的了解。

我有一个名为Topics:

的简单表
Student | Interviewer | Topic
==========================================
Chuck   | Susan       | Project Management
Jill    | Jack        | Microsoft Word
Chuck   | Jack        | Microsoft Word
Bobby   | Jane        | Project Management
Jill    | Jack        | Python Scripting

这是样本数据。

对于每次访谈,为每个主题添加一行。一些学生接受了一位以上的面试官的访问,一些访谈只涉及一个主题,其他访谈涉及多个主题。

我正在尝试编写一个查询,该查询返回学生和面试者对,这些学生只接受过一个人的采访,但被问到有关多个主题的问题。

因此,通过上面的示例数据,我只能回到一行:(吉尔,杰克)。

我已尝试过group by和sql查询的各种组合,但它们都没有返回我想要的内容。我认为,当涉及到按查询分组时,我错过了一些东西。我已经阅读了多个关于分组和搜索的网站,并搜索了其他堆栈溢出问题,但它只是没有点击。

2 个答案:

答案 0 :(得分:3)

您可以使用havingselect student,max(interviewer) --or min(interviewer) as there will only be one interviewer from tbl group by student having count(distinct interviewer) = 1 and count(topic) > 1 执行此操作。

myFile

答案 1 :(得分:0)

我只想指出count(distinct)可能很昂贵。另一种选择是:

select t.student, max(t.interviewer) 
from tbl t
group by t.student
having min(interviewer) = max(interviewer) and
       min(topic) <> max(topic);