代码之家  ›  专栏  ›  技术社区  ›  DisgruntledGoat

在MySQL中可以对行进行两次分组吗?

  •  4
  • DisgruntledGoat  · 技术社区  · 15 年前

    someid    somestring
    1         Hello
    1         World
    1         Blah
    2         World
    2         TestA
    2         TestB
    ...
    

    目前,我正在按id分组并连接字符串,因此我最终得出以下结论:

    1         Hello,World,Blah
    2         World,TestA,TestB
    ...
    

    是否可以进行第二次分组,以便如果有多个条目以相同的字符串结尾,我也可以对它们进行分组?

    1 回复  |  直到 15 年前
        1
  •  7
  •   Mark Byers    15 年前

    是的,只需将当前查询放在内部select中,并将新的groupby应用于外部select。请注意,您可能希望使用组\u CONCAT的ORDER BY来确保字符串始终以相同的顺序连接。

    SELECT somelist, COUNT(*) FROM
    (
        SELECT
            someid,
            GROUP_CONCAT(somestring ORDER BY somestring) AS somelist
        FROM table1
        GROUP BY someid
    ) AS T1
    GROUP BY somelist
    

    'Blah,Hello,World', 1
    'TestA,TestB,World', 2
    

    以下是我使用的测试数据:

    CREATE TABLE table1 (someid INT NOT NULL, somestring NVARCHAR(100) NOT NULL);
    INSERT INTO table1 (someid, somestring) VALUES
    (1, 'Hello'),
    (1, 'World'),
    (1, 'Blah'),
    (2, 'World'),
    (2, 'TestA'),
    (2, 'TestB'),
    (3, 'World'),
    (3, 'TestB'),
    (3, 'TestA');