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

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

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

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

Q&A

解決済

2回答

1337閲覧

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

ooo_oooo

総合スコア1

MySQL

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

0グッド

0クリップ

投稿2022/06/16 07:02

編集2022/06/16 07:17

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

一つ目のテーブル

sql

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

2つ目のテーブル

sql

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

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

sql

1SELECT 2 T.id, 3 T.name AS "商品名", 4 C.color AS "色", 5 T.price AS "値段" 6FROM 7 toys AS T 8RIGHT JOIN 9 colortable AS C 10ON 11 T.colorcode = C.colorcode;

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

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

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

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

sql

1SELECT name, 2 max(CASE WHEN color = '赤' THEN 1 ELSE 0 END) AS, 3 max(CASE WHEN color = '青' THEN 1 ELSE 0 END) AS, 4 max(CASE WHEN color = '黄' THEN 1 ELSE 0 END) AS, 5 max(CASE WHEN color = '白' THEN 1 ELSE 0 END) AS, 6 max(CASE WHEN color = '黒' THEN 1 ELSE 0 END) AS7FROM ( 8 SELECT 9 T.id, 10 T.name AS "商品名", 11 C.color AS "色", 12 T.price AS "値段" 13FROM 14 toys AS T 15RIGHT JOIN 16 colortable AS C 17ON 18 T.colorcode = C.colorcode) AS toys2 19GROUP BY name; 20

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

'field list'にないよエラーが出てしまい詰まっています。

サブクエリーで別名にしてるんですから、その名称で指定する必要があります。

SQL

1SELECT 商品名, 2 max(CASE WHEN= '赤' THEN 1 ELSE 0 END) AS,

色をハードコーディングで指定してクロス集計しようという事ですから、colortableは不要だと思います。

SQL

1SELEC 2, name AS 商品名 3, sum(colorcode = '001') AS4, sum(colorcode = '002') AS5, sum(colorcode = '003') AS6, sum(colorcode = '004') AS7, sum(colorcode = '005') AS8FROM toys 9group by name

投稿2022/06/19 02:09

sazi

総合スコア25186

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ooo_oooo

2022/06/19 12:26

ご回答ありがとうございます! 無事実装できました! ありがとうございます!
guest

0

idと商品名の関係がわかりません

SQL

1create table tbl(id int primary key,goods varchar(10),color varchar(10),price int); 2insert into tbl values 3(1,'あああ','赤',100), 4(2,'いいい','青',200), 5(3,'ううう','白',300), 6(4,'えええ','黄色',400), 7(5,'あああ','赤',100), 8(6,'あああ','青',100); 9 10select goods , 11sum(color='赤') as, 12sum(color='青') as, 13sum(color='白') as, 14sum(color='黄色') as 黄色 15from tbl 16group by goods;

投稿2022/06/16 07:10

yambejp

総合スコア114829

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ooo_oooo

2022/06/16 08:04

すみません、質問文を修正いたしました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問