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

可以在MySQL中对行进行两次分组吗?,mysql,group-by,Mysql,Group By,我有一张这样的桌子: someid somestring 1 Hello 1 World 1 Blah 2 World 2 TestA 2 TestB ... 目前,我正在按id分组并连接字符串,因此我最终得出以下结论: 1 Hello,World,Blah 2 World,TestA,TestB ... 是否可以进行第二次分组,以便如果有多个条目以相同的字符

我有一张这样的桌子:

someid    somestring
1         Hello
1         World
1         Blah
2         World
2         TestA
2         TestB
...
目前,我正在按id分组并连接字符串,因此我最终得出以下结论:

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

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

是的,只需将当前查询放入内部选择,并将新的分组依据应用于外部选择。请注意,您可能希望使用GROUP_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');

子查询的效率一般如何?这里总是有关于“如何使这一个查询/取消嵌套查询”等问题,这意味着嵌套查询在某种程度上是不好的。相关子查询(内部查询引用外部查询)如果优化器没有找到将其作为联接执行的方法,而是在外部查询的每行执行一次内部查询,则可能会非常慢。但这不是一个相关子查询,所以没有问题。请记住,GROUP_CONCAT()的长度是有限的,默认情况下通常为1024字节。如果内部查询有一个“大”结果集,这个答案可能会中断。您可以使用
显示变量,如“%group\u concat%”来获取当前限制