在HAVING中使用通配符

1 sql

我试图获得所有拥有雅虎电子邮件至少2个客户的国家的列表.

到目前为止,我想出了这个:

SELECT Country 
FROM Customer
GROUP BY Country
HAVING COUNT(Email LIKE '%yahoo%')>= 2
Run Code Online (Sandbox Code Playgroud)

这不起作用.可能是因为我不能在HAVING子句中使用LIKE.我试图在where子句中使用它,但我不能在那里使用聚合函数.你知道怎么做这个吗?假设标准sql.谢谢

xQb*_*ert 5

使用条件聚合

SELECT Country 
FROM Customer 
GROUP BY Country 
HAVING SUM(case when Email like '%yahoo%' then 1 else 0 end )>= 2
Run Code Online (Sandbox Code Playgroud)

或者只是将限制放在where子句中......这样就可以在计数可能提升之前施加限制; 因为它只需要评估类似'%yahoo%'的电子邮件或者计算时的所有电子邮件; 但是因为where子句无论如何都必须进行评估.我不确定哪种更快,无需测试.

SELECT Country 
FROM Customer 
WHERE email like '%yahoo%'
GROUP BY Country 
HAVING count(Email)>= 2
Run Code Online (Sandbox Code Playgroud)

虽然像%val%无法使用任何索引所以; 也许不吧.但如果它像%yahoo.com'你会看到一个.(如果索引在电子邮件中)