所以我有一个由即时消息应用程序自动生成的表,我正在寻找所有用户发送的所有消息.每个对话都有一个"到"列,问题是它在末尾附加了一个短连接字符串.所以to列看起来像:username @ company.com/id 1111
我希望得到所有不同的用户名和它们出现的次数.任何建议表示赞赏.我正在使用PostgreSQL 9.1.1
问题是解析字符串.这在很大程度上取决于SQL的方言.这是一种使用MySQL的方法:
select substring_index(`to`, '/', 1) as username, count(*)
from t
group by substring_index(`to`, '/', 1);
Run Code Online (Sandbox Code Playgroud)
在大多数其他SQL方言中,逻辑略有不同.在SQL Server中:
select left("to", charindex('/', "to") - 1) as username, count(*)
from t
group by left("to", charindex('/', "to") - 1);
Run Code Online (Sandbox Code Playgroud)
在其他数据库中,等价物charindex()
可能是instr()
或position()
.
编辑:
我最初将"用户名"误解为整个电子邮件地址.Barmar指出,问题中的格式确实表明了之前的部分@
.只有电子邮件的用户名部分,没有域,似乎很危险.但是,上面的作品,只是通过替换'@'
为'/'
:
select substring_index(`to`, '@', 1) as username, count(*)
from t
group by substring_index(`to`, '@', 1);
select left("to", charindex('@', "to") - 1) as username, count(*)
from t
group by left("to", charindex('@', "to") - 1);
Run Code Online (Sandbox Code Playgroud)