テーブルを変更できますか?新しい列でグループ化できるように、 col1
3つの列(たとえば、、、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
して必要な3つの列を追加し、主キーを変更し、とを使用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
-----+---------- +--------------
最後のクエリでは、必要なIDを抽出するために1つを使用し、グループ化のためにSELECT
外部を使用します。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