开发者

Is it possible to group rows twice in MySQL?

I have a table like this:

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

Currently I'm grouping by the id and concatenat开发者_开发问答ing the strings, so I end up with this:

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

Is it possible to do a second grouping so that if there are multiple entries that end up with the same string, I can group those too?


Yes, just put your current query in an inner select and apply a new GROUP BY to the outer select. Note that you will probably want to use ORDER BY of GROUP_CONCAT to ensure that the strings are always concatenated in the same order.

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

Result:

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

Here's the test data I used:

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');
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜