HAVING 子句:至少一个未分组的值是 X
HAVING clause: at least one of the ungrouped values is X
示例table:
Col1 | Col2
A | Apple
A | Banana
B | Apple
C | Banana
输出:
A
我想获取 Col1
的所有值,这些值有多个条目且至少有一个带有 Banana
。
我尝试使用 GROUP BY
:
SELECT Col1
FROM Table
GROUP BY Col1
HAVING count(*) > 1
AND ??? some kind of ONEOF(Col2) = 'Banana'
如何重新表述我的查询有效的 HAVING
子句?
使用条件聚合:
SELECT Col1
FROM Table
GROUP BY Col1
HAVING COUNT(DISTINCT col2) > 1 AND
COUNT(CASE WHEN col2 = 'Banana' THEN 1 END) >= 1
您可以有条件地检查具有 至少一个 'Banana'
值的 Col1
组使用 COUNT
和 CASE
表达式它。
请注意,第一个 COUNT
必须使用 DISTINCT
,以便检测到具有至少两个 不同 Col1
值的组.如果 有多个条目 你的意思是具有相同 Col2
值的行也重复了不止一次,那么你可以跳过 DISTINCT
.
SELECT Col1
FROM Table
GROUP BY Col1
HAVING count(*) > 1
AND Col1 in (select distinct Col1 from Table where Col2 = 'Banana');
试试这个,
declare @t table(Col1 varchar(20), Col2 varchar(20))
insert into @t values('A','Apple')
,('A','Banana'),('B','Apple'),('C','Banana')
select col1 from @t A
where exists
(select col1 from @t B where a.col1=b.col1 and b.Col2='Banana')
group by col1
having count(*)>1
这是一个简单的方法:
SELECT Col1
FROM table
GROUP BY Col1
HAVING COUNT(DISTINCT CASE WHEN col2= 'Banana' THEN 1 ELSE 2 END) = 2
示例table:
Col1 | Col2
A | Apple
A | Banana
B | Apple
C | Banana
输出:
A
我想获取 Col1
的所有值,这些值有多个条目且至少有一个带有 Banana
。
我尝试使用 GROUP BY
:
SELECT Col1
FROM Table
GROUP BY Col1
HAVING count(*) > 1
AND ??? some kind of ONEOF(Col2) = 'Banana'
如何重新表述我的查询有效的 HAVING
子句?
使用条件聚合:
SELECT Col1
FROM Table
GROUP BY Col1
HAVING COUNT(DISTINCT col2) > 1 AND
COUNT(CASE WHEN col2 = 'Banana' THEN 1 END) >= 1
您可以有条件地检查具有 至少一个 'Banana'
值的 Col1
组使用 COUNT
和 CASE
表达式它。
请注意,第一个 COUNT
必须使用 DISTINCT
,以便检测到具有至少两个 不同 Col1
值的组.如果 有多个条目 你的意思是具有相同 Col2
值的行也重复了不止一次,那么你可以跳过 DISTINCT
.
SELECT Col1
FROM Table
GROUP BY Col1
HAVING count(*) > 1
AND Col1 in (select distinct Col1 from Table where Col2 = 'Banana');
试试这个,
declare @t table(Col1 varchar(20), Col2 varchar(20))
insert into @t values('A','Apple')
,('A','Banana'),('B','Apple'),('C','Banana')
select col1 from @t A
where exists
(select col1 from @t B where a.col1=b.col1 and b.Col2='Banana')
group by col1
having count(*)>1
这是一个简单的方法:
SELECT Col1
FROM table
GROUP BY Col1
HAVING COUNT(DISTINCT CASE WHEN col2= 'Banana' THEN 1 ELSE 2 END) = 2