你可以改变表?它将使最有意义的分裂col1
三个栏(如id
,size
,并且color
)修改表,让你可以通过新的id
栏目组:
-----+----+----+-----------+--------------
45678| sm | w | 18 | Mens clothing
-----+----+----+-----------+--------------
45678| sm | b | 5 | Mens clothing
-----+----+----+-----------+--------------
2189 | L | Wh | 4 | Juniors Clothing
-----+----+----+-----------+--------------
2189 | L | Bl | 3 | Juniors Clothing
-----+----+----+---------- +--------------
你可以做到这一点使用ALTER TABLE
添加所需的三列并更改主键,使用SUBSTRING_INDEX
和UPDATE
提取并存储拆分值,并使用另一个ALTER TABLE
进行清理。事情是这样的:
ALTER TABLE t
DROP PRIMARY KEY;
ALTER TABLE T
ADD id INT UNSIGNED NOT NULL,
ADD size VARCHAR(255),
ADD color VARCHAR(255),
ADD PRIMARY KEY (col1);
UPDATE TABLE t
SET id = CONVERT(SUBSTRING_INDEX(col1, '-', 1), UNSIGNED INTEGER),
SET size = SUBSTRING_INDEX(col1, '-', 2),
SET color = SUBSTRING_INDEX(col1, '-', 3);
ALTER TABLE t
DROP COLUMN col1;
如果你不能改变的表,你可以提取需要使用SUBSTRING_INDEX ID号:
SELECT SUBSTRING_INDEX(col1, '-', 1), col2, col3 FROM table;
给出:
-----+-----------+--------------
45678| 18 | Mens clothing
-----+-----------+--------------
45678| 5 | Mens clothing
-----+-----------+--------------
2189 | 4 | Juniors Clothing
-----+-----------+--------------
2189 | 3 | Juniors Clothing
-----+---------- +--------------
对于最终查询,我会使用一个SELECT
来提取您需要的id,以及一个外部SELECT
分组:
SELECT id, SUM(col2) AS total, col3
FROM
(SELECT SUBSTRING_INDEX(col1, '-', 1) AS id, col2, col3
FROM table) AS t
GROUP BY id
您可以按第三列进行分组吗? – jmilloy