Mysql - 我如何避免 group by 但仍然使用 concat 和 group concat 我需要组合多个列和行结果
Mysql - How do I avoid group by but still with concat and group concat I would need to combine multiple columns and rows results
我有类似 table
的内容
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 |
+--------------------------------------+-------------+
我需要这样的结果(全部分组在一行中,单个值 w.r.t uuid 和 short-uuid 相同)
| uuidDetails
+----------------------------------------------------------------------------------------------------------------+-------------+
| 11d52ebd-1404-115d-903e-8033863ee848,22b6f783-aeaf-1195-97ef-a6d8c47261b1|8033863ee848&&33c51085-ccd8-1119-ac37-332510a16e1b| 332510a16e1b |
+----------------------------------------------------------------------------------------------------------------+-------------+
(基本上将 uuid 和短 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 个短 uuid,实际上它需要将前 2 个 uuid 与 1 个短(因为相同的 short-uuid)uuid 和第 3 个 uuid 分组其他短 uuid)
| uuidDetails
+----------------------------------------------------------------------------------------------------------------+-------------+
| 11d52ebd-1404-115d-903e-8033863ee848,22b6f783-aeaf-1195-97ef-a6d8c47261b1,33c51085-ccd8-1119-ac37-332510a16e1b| 332510a16e1b |
+----------------------------------------------------------------------------------------------------------------+-------------+
这出乎我的意料
如有任何帮助,我们将不胜感激。谢谢
使用嵌套查询。
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 值的排序没有要求,我们可以在 GROUP_CONCAT
聚合中使用 ORDER BY
以使结果更具确定性,因此查询将 return 只是给定相同数据的许多可能结果之一,例如return aa,bb|1&&cc|3
而不是 bb,aa|1&&cc|3
或 cc|3&&aa,bb|1
或 cc|3&&bb,aa|1
.
我有类似 table
的内容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 |
+--------------------------------------+-------------+
我需要这样的结果(全部分组在一行中,单个值 w.r.t uuid 和 short-uuid 相同)
| uuidDetails
+----------------------------------------------------------------------------------------------------------------+-------------+
| 11d52ebd-1404-115d-903e-8033863ee848,22b6f783-aeaf-1195-97ef-a6d8c47261b1|8033863ee848&&33c51085-ccd8-1119-ac37-332510a16e1b| 332510a16e1b |
+----------------------------------------------------------------------------------------------------------------+-------------+
(基本上将 uuid 和短 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 个短 uuid,实际上它需要将前 2 个 uuid 与 1 个短(因为相同的 short-uuid)uuid 和第 3 个 uuid 分组其他短 uuid)
| uuidDetails
+----------------------------------------------------------------------------------------------------------------+-------------+
| 11d52ebd-1404-115d-903e-8033863ee848,22b6f783-aeaf-1195-97ef-a6d8c47261b1,33c51085-ccd8-1119-ac37-332510a16e1b| 332510a16e1b |
+----------------------------------------------------------------------------------------------------------------+-------------+
这出乎我的意料
如有任何帮助,我们将不胜感激。谢谢
使用嵌套查询。
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 值的排序没有要求,我们可以在 GROUP_CONCAT
聚合中使用 ORDER BY
以使结果更具确定性,因此查询将 return 只是给定相同数据的许多可能结果之一,例如return aa,bb|1&&cc|3
而不是 bb,aa|1&&cc|3
或 cc|3&&aa,bb|1
或 cc|3&&bb,aa|1
.