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.谢谢
使用条件聚合
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'你会看到一个.(如果索引在电子邮件中)
| 归档时间: |
|
| 查看次数: |
82 次 |
| 最近记录: |