質問: MySQL集計の質問です。 テーブル1: ``` ユーザー 商品 個数 Aさん りんご 1 Aさん バナナ 4 Aさん オレンジ 2 ``` 結果: ``` ユーザー 商品 個数 商品 個数 商品 個数 Aさん りんご 1 バナナ 4 オレンジ 2 ``` テーブル1からどんなSQL文を実行したら上記ほしい結果ができますか。 よろしくお願い致します。
回答: `test` テーブルを以下の様に作成して、適当にデータを入れてみました。(ユーザー, 商品)カラムには `UNIQUE` 制約を設定していません。 ``` > desc test; +--------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------------+-------------+------+-----+---------+-------+ | ユーザー | varchar(20) | YES | | NULL | | | 商品 | varchar(20) | YES | | NULL | | | 個数 | int(11) | YES | | NULL | | +--------------+-------------+------+-----+---------+-------+ > select * from test; +-------------+--------------+--------+ | ユーザー | 商品 | 個数 | +-------------+--------------+--------+ | Aさん | りんご | 1 | | Aさん | バナナ | 4 | | Aさん | オレンジ | 2 | | Aさん | りんご | 10 | | Bさん | りんご | 5 | | Cさん | バナナ | 3 | | Cさん | オレンジ | 6 | | Cさん | バナナ | 4 | +--------------+--------------+--------+ ``` サブクエリでユーザーごとの「商品 個数」を作成して、`GROUP_CONCAT` で連結します。 ``` > SELECT ユーザー, GROUP_CONCAT(X SEPARATOR ' ') AS 商品リスト FROM ( SELECT ユーザー, CONCAT(商品, ' ', SUM(個数)) AS X FROM test GROUP BY ユーザー,商品 ) AS list GROUP BY ユーザー; +--------------+-----------------------------+ | ユーザー | 商品リスト | +--------------+-----------------------------+ | Aさん | オレンジ 2 バナナ 4 りんご 11 | | Bさん | りんご 5 | | Cさん | オレンジ 6 バナナ 7 | +--------------+-----------------------------+ ```