Bis*_*swa 102 mysql concat group-concat
如果我在MySQL中有一个包含以下数据的表:
id Name Value
1 A 4
1 A 5
1 B 8
2 C 9
Run Code Online (Sandbox Code Playgroud)
如何将其变为以下格式?
id Column
1 A:4,5,B:8
2 C:9
Run Code Online (Sandbox Code Playgroud)
我想我必须使用GROUP_CONCAT.但我不确定它是如何工作的.
Sam*_*ami 143
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;
Run Code Online (Sandbox Code Playgroud)
你可以在这里看到它实现:Sql Fiddle Demo.正是你需要的.
分两步更新拆分.首先,我们得到一个表,其中包含所有值(逗号分隔)与唯一[Name,id].然后从获得的表中我们获取所有名称和值作为单个值对每个唯一ID请参阅此处解释的SQL Fiddle Demo(向下滚动,因为它有两个结果集)
编辑在阅读问题时出错,我只按id分组.但是如果(值要按名称和ID分组,然后按ID分组,则需要两个group_contacts).以前的答案是
select
id,group_concat(concat(`name`,':',`value`) separator ',')
as Result from mytbl group by id
Run Code Online (Sandbox Code Playgroud)
你可以在这里看到它实现:SQL Fiddle Demo
eis*_*erg 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;
Run Code Online (Sandbox Code Playgroud)
SQL小提琴:http://sqlfiddle.com/#!2/b5abe/9/0
SELECT ID, GROUP_CONCAT(CONCAT_WS(':', NAME, VALUE) SEPARATOR ',') AS Result
FROM test GROUP BY ID
Run Code Online (Sandbox Code Playgroud)
首先,我看不出有一个不唯一的 ID 的原因,但我猜它是一个连接到另一个表的 ID。其次,不需要子查询,这会打败服务器。您在一个查询中执行此操作,如下所示
SELECT id,GROUP_CONCAT(name, ':', value SEPARATOR "|") FROM sample GROUP BY id
Run Code Online (Sandbox Code Playgroud)
你得到快速和正确的结果,你可以用分隔符“|”分割结果。我总是使用这个分隔符,因为不可能在字符串中找到它,因此它是唯一的。有两个 A 没有问题,您只需确定值。或者,您可以多列一个带有字母的列,这样更好。像这样 :
SELECT id,GROUP_CONCAT(DISTINCT(name)), GROUP_CONCAT(value SEPARATOR "|") FROM sample GROUP BY name
Run Code Online (Sandbox Code Playgroud)
小智 5
SELECT id, GROUP_CONCAT(CONCAT_WS(':', Name, CAST(Value AS CHAR(7))) SEPARATOR ',') AS result
FROM test GROUP BY id
Run Code Online (Sandbox Code Playgroud)
您必须使用强制转换或转换,否则将返回 BLOB
结果是
id Column
1 A:4,A:5,B:8
2 C:9
Run Code Online (Sandbox Code Playgroud)
你必须通过Python或Java等程序再次处理结果
| 归档时间: |
|
| 查看次数: |
259690 次 |
| 最近记录: |