1

これが私のテーブルです:

----------+-----------+--------------
45678-sm-w|   18      | Mens clothing
----------+-----------+--------------
45678-sm-b|   5       | Mens clothing
----------+-----------+--------------
2189-L-Wh |   4       | Juniors Clothing
----------+-----------+--------------
2189-L-Bl |   3       | Juniors Clothing
----------+---------- +--------------

これが望ましい結果です。

----------+-----------+--------------
45678     |   23      | Mens clothing
----------+-----------+--------------
2189      |   7       | Juniors Clothing
----------+-----------+--------------
4

3 に答える 3

7

データを選択する場合は、次のようなものを使用できます。

select SUBSTRING_INDEX(col1, '-', 1) col1, 
  sum(col2) Total, 
  col3
from table1
group by SUBSTRING_INDEX(col1, '-', 1), SUBSTRING_INDEX(col3, ' ', 1)
order by col1 desc

SQL FiddleWithDemoを参照してください

于 2012-10-12T19:10:14.603 に答える
4

テーブルを変更できますか?新しい列でグループ化できるように、 col13つの列(たとえば、、、idおよびsize)に分割してテーブルを変更するのが最も理にかなっています。colorid

-----+----+----+-----------+--------------
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_INDEXUPDATEて分割値を抽出して保存し、別の列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
于 2012-10-12T19:22:37.327 に答える
0

最初の列を数値にキャストし、新しく作成された列にインデックスを追加して、その列でgroupbysumを実行します。

update table set `left`=CAST(col1 AS SIGNED );

select `left`,sum(*),`col3` from table;
于 2012-10-12T19:03:54.673 に答える