SQL选择与其他值不同的值

时间:2013-12-20 15:18:12

标签: sql distinct postgresql-9.1

所以我有一个由即时消息应用程序自动生成的表,我正在寻找所有用户发送的所有消息。每个对话都有一个"到"列的问题是它在末尾附加了一个短连接字符串。所以to列看起来像: username @ company.com / id 1111

我希望获得所有不同的用户名及其出现次数。任何建议表示赞赏。我正在使用PostgreSQL 9.1.1

2 个答案:

答案 0 :(得分:5)

问题在于解析字符串。这在很大程度上取决于SQL的方言。以下是使用MySQL的方法:

select substring_index(`to`, '/', 1) as username, count(*)
from t
group by substring_index(`to`, '/', 1);

在大多数其他SQL方言中,逻辑略有不同。在SQL Server中:

select left("to", charindex('/', "to") - 1) as username, count(*)
from t
group by left("to", charindex('/', "to") - 1);

在其他数据库中,相当于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);

答案 1 :(得分:0)

这个'连接字符串'是否存在共性/共享特征?

如果是这样,那么只是创建字符串操作的问题,以帮助您在SQL查询中忽略它。

在不知道连接字符串的模式的情况下,很难提供答案。