代码之家  ›  专栏  ›  技术社区  ›  Matt Brunmeier

使用逗号分隔字段的MySQL分组

  •  1
  • Matt Brunmeier  · 技术社区  · 16 年前

    这是一个棘手的问题。

    我有以下资料:

    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
    

    有什么想法吗?可以想象,我可以创建一个视图,将技能集划分为规范化的形式(应该是这样的)。但我也不确定它的语法。

    1 回复  |  直到 16 年前
        1
  •  7
  •   Quassnoi    16 年前

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

    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
    

    由于您提到您的技能在单独的表格中,请使用该表格:

    SELECT  skill, COUNT(*)
    FROM    skills s
    JOIN    users u
    ON      find_in_set(s.skill, u.sets)
    GROUP BY
            s.skill
    

    然而,这将永远不会匹配打字错误,它们将被跳过。