mysql group by成员来自逗号分隔的字符串

时间:2014-08-13 22:58:38

标签: mysql group-by

我有一张超过一百万行的表:

id | names
1  | sarah johnson
2  | anna smith;deborah cuoco
3  | sarah johnson;anna smith

我想执行一个返回

的查询
name          | occurences
sarah johnson | 2
anna smith    | 2
deborah cuoco | 1

如果不是“名字”有时包含多个条目,那么它就像下面这样简单:

SELECT names, count(id) as occurences
FROM table
GROUP BY names
ORDER BY occurences DESC

但我不知道如何使用包含多个值的“名称”处理此问题,在这种情况下由半列分隔

有没有办法在单个查询中执行此操作?

1 个答案:

答案 0 :(得分:0)

如果你在任何一行中只有一些这样的名字,你可以通过一些操作来解决它们:

SELECT substring_index(substring_index(t.names, ';', n.n), ';', -1) as name,
       count(*) as occurences
FROM table t cross join
     (select 1 as n union all select 2 union all select 3) n
WHERE n.n <= length(t.names) - length(replace(t.names, ';', '')) + 1
GROUP BY name
ORDER BY occurences DESC;

这将从名称字符串中提取第n个元素。 where子句确保为具有x元素的字符串提取唯一的x元素(否则,最后一个元素将被覆盖)。以上内容适用于names中最多三个名称。