Mysql 需要合并字段并获得唯一的行
我有一个包含+100万行的数据库,其结构如下所示:Mysql 需要合并字段并获得唯一的行,mysql,group-by,group-concat,Mysql,Group By,Group Concat,我有一个包含+100万行的数据库,其结构如下所示: CREATE TABLE IF NOT EXISTS `Performance` ( `id` int(11) NOT NULL AUTO_INCREMENT, `CIDs` varchar(100) DEFAULT NULL, `COLOR` varchar(100) DEFAULT NULL, `Name` varchar(255) DEFAULT NULL, `XT` bigint(16) DEFAULT NULL,
CREATE TABLE IF NOT EXISTS `Performance` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`CIDs` varchar(100) DEFAULT NULL,
`COLOR` varchar(100) DEFAULT NULL,
`Name` varchar(255) DEFAULT NULL,
`XT` bigint(16) DEFAULT NULL,
`MP` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `CIDs` (`CIDs`),
KEY `COLOR` (`COLOR`),
KEY `Name` (`Name`),
KEY `XT` (`XT`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=0 ;
INSERT into `Performance` (`id`, `CIDs`, `COLOR`, `Name`, `XT`, `MP`)
VALUES
(1, '1253374160', 'test test test test test', 'Load1', '89421331221', ''),
(2, '1271672029', NULL, 'Load1', '19421331221', NULL),
(3, '1188959688', NULL, 'Load2', '39421331221', NULL),
(4, '1271672029', NULL, 'Load3', '49421341221', 'Description'),
(5, '1271888888', NULL, 'Load4', '59421331221', 'Description');
输出应该如下所示:
+----+------------+--------------------------+-------------+-------------+-------+-----------+---------+
| id | CIDs | COLOR | XT | MP | Name | PIDs | unqName |
+----+------------+--------------------------+-------------+-------------+-------+-----------+---------+
| 1 | 1253374160 | test test test test test | 89421331221 | | Load1 | 1,2 | Load1 |
| 3 | 1188959688 | NULL | 39421331221 | NULL | Load2 | 3 | Load2 |
| 4 | 1271672029 | NULL | 49421341221 | Description | Load3 | 4,5 | Load3 |
+----+------------+--------------------------+-------------+-------------+-------+-----------+---------+
我怎样才能尽快做到这一点?
我已尝试与某个分组,但需要几分钟:/
//编辑:
对于group by的解决方案,我需要4个子查询:/
//编辑2:
应要求:
SELECT id,
cids,
color,
xt,
mp,
name,
Concat(pids, ",", Group_concat(DISTINCT id)) AS PIDs,
Ifnull(name, id) AS unqName
FROM (SELECT id,
cids,
color,
xt,
mp,
name,
Concat(pids, ",", Group_concat(DISTINCT id)) AS PIDs,
Ifnull(mp, id) AS unqMP
FROM (SELECT id,
cids,
color,
xt,
mp,
name,
Concat(pids, ",", Group_concat(DISTINCT id)) AS PIDs,
Ifnull(xt, id) AS unqXT
FROM (SELECT id,
cids,
color,
xt,
mp,
name,
Group_concat(DISTINCT id) AS PIDs,
Ifnull(color, id) AS unqCOLOR
FROM performance
GROUP BY unqcolor) m
GROUP BY unqxt) x
GROUP BY unqmp) y
GROUP BY unqname
在我看来,有一些概念上的缺陷:对于
Load1
有两个id
s,两个COLOR
s,两个XT
s和两个MP
s。如何在示例中第一行的每一列中使用一个任意值将其聚合到一行中?您当前的SQL是什么来获得这个结果的?我使用我在上面发布的SQL语句。但速度太慢了,我需要合并字段。有时字段是给定的,有时不是,所以我需要合并字段。