Select 所有行都只分配了一次特定值

Select all rows having specific value assigned only once

我很困惑如何从下面的 table 查询这个。我必须只获取分配给单个组的那些类别。

**Id**          **Category**   **PracticeGroup**
1               Category-1     Practice Group-1
2               Category-1     Practice Group-1
3               Category-2     Practice Group-2
4               Category-1     Practice Group-1
5               Category-2     Practice Group-1

在上述场景中,Category-1 将是只有一个分配的练习组 "Practice Group-1" 的结果集。

我喜欢通过比较最小值和最大值来解决这类问题:

select cateogry
from t
group by category
having min(practicegroup) = max(practicegroup);

虽然也可以使用count(distinct),但是count(distinct)比简单的聚合函数要贵很多。另请注意,这会忽略 null 值。如果要确保 null 值不影响结果:

select cateogry
from t
group by category
having min(practicegroup) = max(practicegroup) and
       count(practicegroup) = count(*);

就可以做到这一点:-

select [category] from (select distinct [category] ,[Practice Group] from tbl) as temp
group by [category]
having count([category]) = 1

您可以使用@potasin 提到的相同查询,以及 Practice Group 的 min

select [Category],min([Practice Group])
from tbl
group by [Category] 
having count(distinct [Practice Group]) = 1