Можно ли сгруппировать строки дважды в MySQL? - PullRequest
4 голосов
/ 30 марта 2010

У меня есть такая таблица:

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

В настоящее время я группируюсь по идентификатору и объединяю строки, поэтому я получаю следующее:

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

Можно ли выполнить вторую группировку, чтобы при наличии нескольких записей с одинаковой строкой я тоже мог сгруппировать их?

1 Ответ

7 голосов
/ 30 марта 2010

Да, просто поместите текущий запрос во внутренний выбор и примените новый GROUP BY к внешнему выбору. Обратите внимание, что вы, вероятно, захотите использовать ORDER BY из GROUP_CONCAT, чтобы строки всегда объединялись в одном и том же порядке.

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');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...