为了账号安全,请及时绑定邮箱和手机立即绑定

如何在MySQL中的conat中使用group_conat

/ 猿问

如何在MySQL中的conat中使用group_conat

慕村9548890 2019-10-20 16:08:55

如何在MySQL中的conat中使用group_conat

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


id       Name       Value

1          A          4

1          A          5

1          B          8

2          C          9

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


id         Column

1          A:4,5,B:8

2          C:9


我想我得用GROUP_CONCAT..但我不知道它是怎么工作的。


查看完整描述

3 回答

?
千万里不及你
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`) tblgroup by id;

您可以在这里看到它的实现:SQL Fiddle演示..这正是你所需要的。

更新分两步。首先,我们得到一个表,该表的所有值(逗号分隔)对应于唯一的[name,id]。然后,从获取的表中,我们得到所有的名称和值,作为每个唯一id的一个值,参见这里解释的SQL Fiddle演示(向下滚动,因为它有两个结果集)

编辑在阅读问题时出现了一个错误,我只按身份证分组。但是,如果要将值按名称和id组合,然后按id对所有值进行组合,则需要两个group_Contact。以前的回答是

select id,group_concat(concat(`name`,':',`value`) separator ',')as Result from mytbl group by id

您可以在这里看到它的实现:SQL Fiddle演示



查看完整回答
反对 回复 2019-10-21
?
暮色呼如

试着:


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



查看完整回答
反对 回复 2019-10-21
?
回首忆惘然

首先,我不认为有一个不唯一的ID的原因,但我想它是一个连接到另一个表的ID。第二,不需要子查询,这会使服务器崩溃。在一个查询中执行此操作,如下所示

SELECT id,GROUP_CONCAT(name, ':', value SEPARATOR "|") FROM sample GROUP BY id

您可以得到快速和正确的结果,并且可以通过分隔符“AC.26”来拆分结果。我总是使用这个分隔符,因为不可能在字符串中找到它,因为它是唯一的。没有问题,有两个A,你只确定值。或者你可以再来一次,还有一封信,这就更好了。就像这样:

SELECT id,GROUP_CONCAT(DISTINCT(name)), GROUP_CONCAT(value SEPARATOR "|") FROM sample GROUP BY name




查看完整回答
反对 回复 2019-10-21

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信