MySQL用逗号分隔字段分组

Mat*_*ier 1 mysql

这是一个棘手的问题.

我的数据如下:

User ID  Name     Skill Sets
1        Jim      Install, Configure
2        Jack     Install
3        John     Configure, Setup, Blah
4        Bill     Setup, Install

这不是我的设计,也不是改变数据格式化方式的选项.麻烦的是我需要按照独特的技能组合.显然现在的一个小组给了我:

Skill Set                Count
Install, Configure       1
Install                  1
Configure, Setup, Blah   1
Setup, Install           1

期望的输出是:

Skill Set    Count
Install      3
Configure    2
Setup        2
Blah         1

有任何想法吗?我可以想象一个将技能集分成标准化形式的视图(应该是这样).但我对这方面的语法也不是肯定的.

Qua*_*noi 7

您需要一个包含所有可能的技能值的行集.

MySQL 缺乏一种方法,所以你必须以某种方式生成它.

如果您有这样的结果集,只需发出:

SELECT  skill, COUNT(*)
FROM    (
        SELECT 'Install' AS skill
        UNION ALL
        SELECT 'Configure' AS skill
        UNION ALL
        SELECT 'Setup' AS skill
        UNION ALL
        SELECT 'Blah' AS skill
        ) s
JOIN    users u
ON      find_in_set(s.skill, u.sets)
GROUP BY
        s.skill
Run Code Online (Sandbox Code Playgroud)

由于您提到您在单独的表中拥有自己的技能,因此请使用该表:

SELECT  skill, COUNT(*)
FROM    skills s
JOIN    users u
ON      find_in_set(s.skill, u.sets)
GROUP BY
        s.skill
Run Code Online (Sandbox Code Playgroud)

然而,这不会与拼写错误相匹配,它们将被跳过.