質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

解決済

SQL サブクエリを使用してクロス集計をしたい

ooo_oooo
ooo_oooo

総合スコア1

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

2回答

0評価

0クリップ

233閲覧

投稿2022/06/16 07:02

編集2022/06/19 21:26

タイトル通りのことをしたいのですが、組み合わせ方がわかりません。

一つ目のテーブル

sql

INSERT INTO sql_task.toys (id,name,colorcode,price,remarks) VALUES (1, 'パーティ衣装', "002", 1680,NULL), (2, 'ブリキのおもちゃ', "001", 412,NULL), (3, 'ゾンビのマスク', "005", 568,NULL), (4, 'ブリキのおもちゃ', "004", 412,NULL), (5, 'ゾンビのマスク', "002", 568,NULL), (6, 'ブリキのおもちゃ', "005", 412,NULL), (7, 'ゾンビのマスク', "001", 568,NULL), (8, 'ゾンビのマスク', "004", 568,NULL), (9, 'パーティ衣装', "001", 1680,NULL), (10, 'パーティ衣装', "004", 1680,NULL), (11, 'パーティ衣装', "005", 1680,NULL), (12, 'ブリキのおもちゃ', "001", 412,NULL), (13, 'パーティ衣装', "001", 1680,NULL), (14, 'ゾンビのマスク', "004", 568,NULL), (15, 'パーティ衣装', "003", 1680,NULL), (16, 'ブリキのおもちゃ', "003", 412,NULL), (17, 'ブリキのおもちゃ', "003", 412,NULL), (18, 'パーティ衣装', "003", 1680,NULL), (19, 'ブリキのおもちゃ', "002", 412,NULL), (20, 'ゾンビのマスク', "001", 568,NULL);

2つ目のテーブル

sql

INSERT INTO sql_task.colortable (id,colorcode,color) VALUES (1,"001","赤"), (2, "002", "青"), (3, "003", "黄"), (4, "004", "白"), (5, "005", "黒");

上記2つを結合したテーブル

sql

SELECT T.id, T.name AS "商品名", C.color AS "色", T.price AS "値段" FROM toys AS T RIGHT JOIN colortable AS C ON T.colorcode = C.colorcode;

結合済みのテーブルをサブクエリとし、
それを使用してクロス集計を行います

クロス集計の結果は下記のように、色がそれぞれ何回出たかカウントした集計になってほしいです。

例:
id 商品名  赤 青  白  黄色
1  あああ  1  3  4  1
2  いいい 2  4  0  2
3  ううう  
4  えええ  

とりあえず色々なサイトから引っ張ってきてコードを下記のように書いてみたのですが、'field list'にないよエラーが出てしまい詰まっています。

sql

SELECT name, max(CASE WHEN color = '赤' THEN 1 ELSE 0 END) AS, max(CASE WHEN color = '青' THEN 1 ELSE 0 END) AS, max(CASE WHEN color = '黄' THEN 1 ELSE 0 END) AS, max(CASE WHEN color = '白' THEN 1 ELSE 0 END) AS, max(CASE WHEN color = '黒' THEN 1 ELSE 0 END) ASFROM ( SELECT T.id, T.name AS "商品名", C.color AS "色", T.price AS "値段" FROM toys AS T RIGHT JOIN colortable AS C ON T.colorcode = C.colorcode) AS toys2 GROUP BY name;

ご教授よろしくお願いいたします!

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。