如何按ID分组并按sequence排序拼接MySQL多行文本内容?
解决按ID分组拼接有序文本的问题
嘿,这个问题我熟!先把你的原始数据整理成清晰的Markdown表格方便理解:
| id | sequence | text |
|---|---|---|
| 12345 | 01 | Hello, my |
| 12345 | 02 | name is CJ |
| 54321 | 01 | Good morn |
| 54321 | 02 | ing! Sup! |
你的需求很明确:按id分组,把同一ID下的text字段按照sequence的顺序拼接成完整的消息。不同数据库的实现函数略有差异,我给你几个主流数据库的解决方案:
1. MySQL/MariaDB 方案
使用GROUP_CONCAT函数,记得在函数内指定排序规则:
SELECT id, GROUP_CONCAT(text ORDER BY sequence ASC SEPARATOR '') AS full_message FROM your_table_name GROUP BY id;
2. PostgreSQL 方案
用STRING_AGG函数,直接在函数内指定排序:
SELECT id, STRING_AGG(text, '' ORDER BY sequence ASC) AS full_message FROM your_table_name GROUP BY id;
3. SQL Server(2017及以上版本)方案
同样支持STRING_AGG,语法稍有不同:
SELECT id, STRING_AGG(text, '') WITHIN GROUP (ORDER BY sequence ASC) AS full_message FROM your_table_name GROUP BY id;
4. Oracle(11gR2及以上版本)方案
使用LISTAGG函数实现:
SELECT id, LISTAGG(text, '') WITHIN GROUP (ORDER BY sequence ASC) AS full_message FROM your_table_name GROUP BY id;
执行以上对应数据库的查询后,你会得到预期的结果:
| id | full_message |
|---|---|
| 12345 | Hello, my name is CJ |
| 54321 | Good morning! Sup! |
内容的提问来源于stack exchange,提问作者Martin Zeltin
相关产品推荐
相关产品推荐

