首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在MySQL中的CONCAT中使用GROUP_CONCAT

问如何在MySQL中的CONCAT中使用GROUP_CONCAT
EN

Stack Overflow用户
提问于 2012-11-19 18:10:09
回答 7查看 312.3K关注 0票数 129

如果我在MySQL中有一个包含以下数据的表:

代码语言:javascript
复制
id       Name       Value
1          A          4
1          A          5
1          B          8
2          C          9

如何将其转换为以下格式?

代码语言:javascript
复制
id         Column
1          A:4,5,B:8
2          C:9

我想我必须使用GROUP_CONCAT。但我不确定它是如何工作的。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2012-11-19 18:33:12

代码语言:javascript
复制
select id, group_concat(`Name` separator ',') as `ColumnName`
from
(
  select 
    id, 
    concat(`Name`, ':', group_concat(`Value` separator ',')) as `Name`
  from mytbl
  group by 
    id, 
    `Name`
) tbl
group by id;

你可以在这里看到它的实现:。这正是你需要的。

更新拆分分两步进行。首先,我们得到一个表,表中所有的值(用逗号分隔)都对应一个uniqueName,id。然后,从获得的表中,我们将所有名称和值作为每个唯一id的单个值,请参阅此处解释的 (向下滚动,因为它有两个结果集)

编辑阅读问题时出错,我只按id分组。但在以下情况下需要两个group_contacts (值将连接在一起,按名称和id分组,然后按id分组)。之前的答案是

代码语言:javascript
复制
select 
id,group_concat(concat(`name`,':',`value`) separator ',')
as Result from mytbl group by id

你可以在这里看到它的实现:

票数 174
EN

Stack Overflow用户

发布于 2012-11-19 18:20:56

尝试:

代码语言:javascript
复制
CREATE TABLE test (
  ID INTEGER,
  NAME VARCHAR (50),
  VALUE INTEGER
);

INSERT INTO test VALUES (1, 'A', 4);
INSERT INTO test VALUES (1, 'A', 5);
INSERT INTO test VALUES (1, 'B', 8);
INSERT INTO test VALUES (2, 'C', 9);

SELECT ID, GROUP_CONCAT(NAME ORDER BY NAME ASC SEPARATOR ',')
FROM (
  SELECT ID, CONCAT(NAME, ':', GROUP_CONCAT(VALUE ORDER BY VALUE ASC SEPARATOR ',')) AS NAME
  FROM test
  GROUP BY ID, NAME
) AS A
GROUP BY ID;

SQL Fiddle:http://sqlfiddle.com/#!2/b5abe/9/0

票数 23
EN

Stack Overflow用户

发布于 2014-12-22 21:20:36

代码语言:javascript
复制
SELECT ID, GROUP_CONCAT(CONCAT_WS(':', NAME, VALUE) SEPARATOR ',') AS Result 
FROM test GROUP BY ID
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13451605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档