Mysql - Как избежать групповой, но все еще с concat и concat группы, мне нужно было бы объединить результаты нескольких столбцов и строк - PullRequest
0 голосов
/ 10 октября 2019

У меня есть что-то похожее на таблицу

mysql> select uuid , short-uuid FROM sampleUUID WHERE identifier ="test123";
+--------------------------------------+-------------+
|       uuid                           | short-uuid   |
+--------------------------------------+-------------+
| 11d52ebd-1404-115d-903e-8033863ee848 | 8033863ee848 |
| 22b6f783-aeaf-1195-97ef-a6d8c47261b1 | 8033863ee848 |
| 33c51085-ccd8-1119-ac37-332510a16e1b | 332510a16e1b |
+--------------------------------------+-------------+

Мне нужен результат типа (сгруппированы все в одну строку, одно значение по uuid и short-uuid совпадают)

| uuidDetails                                                         
+----------------------------------------------------------------------------------------------------------------+-------------+
| 11d52ebd-1404-115d-903e-8033863ee848,22b6f783-aeaf-1195-97ef-a6d8c47261b1|8033863ee848&&33c51085-ccd8-1119-ac37-332510a16e1b| 332510a16e1b |
+----------------------------------------------------------------------------------------------------------------+-------------+

(в основном группировка uuid и short uuid в одну строку из нескольких строк и столбцов)

Я знаю, что это может быть достигнуто с помощью select GROUP_CONCAT(uuid)FROM sampleUUID WHERE identifier ="test123" group by short-uuid;, но я не хочу использовать group byздесь, потому что это дает несколько строк, мне нужно было бы все в одной строке.

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

select ANY_VALUE(CONCAT_WS( '||',CONCAT_WS('|',GROUP_CONCAT(uuid) SEPARATOR ','),short-uuid)) )as uuidDetails from sampleUUID 
where identifier ="test123";

это получилось, как показано нижес ненадлежащим добавлением short-UUID (здесь добавлен только 1 Short UUID, на самом деле его нужно сгруппировать по первым 2 UUID с 1 SHUU (потому что такой же Short-UUID) UUID и 3-й UUID с другим Short UUID)

| uuidDetails                                                         
+----------------------------------------------------------------------------------------------------------------+-------------+
| 11d52ebd-1404-115d-903e-8033863ee848,22b6f783-aeaf-1195-97ef-a6d8c47261b1,33c51085-ccd8-1119-ac37-332510a16e1b| 332510a16e1b |
+----------------------------------------------------------------------------------------------------------------+-------------+

, чего я не ожидал

Любая помощь здесь будет оценена. Спасибо

1 Ответ

2 голосов
/ 10 октября 2019

Использовать вложенные запросы.

SELECT GROUP_CONCAT(result ORDER BY result SEPARATOR '&&') AS uuidDetails
FROM (
    SELECT CONCAT(GROUP_CONCAT(uuid ORDER BY uuid SEPARATOR ','), '|', short_uid) AS result
    FROM sampleUUID
    WHERE identifier = 'test123'
    GROUP BY short_uid
) AS x

ПРИМЕЧАНИЕ. Если не требуется упорядочивать значения UUID, мы можем использовать ORDER BY внутри агрегатов GROUP_CONCAT, чтобы сделать результат более детерминированным, поэтому запрос вернетсятолько один из множества возможных результатов с теми же данными, например, возвращает aa,bb|1&&cc|3 вместо bb,aa|1&&cc|3 или cc|3&&aa,bb|1 или cc|3&&bb,aa|1.

...