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
我很困惑如何从下面的 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