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

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

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

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

2回答

467閲覧

マスタに存在する全IDの月別集計表を出力したい

tomptei_nickow

総合スコア7

MySQL

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2020/02/26 04:55

編集2020/02/26 07:02

###質問内容
ユーザーマスタTABLE2 に存在する全員の集計表(下記のRESULT_TABLE)を出力したいです。

実績データテーブルTABLE1 には、ユーザーマスタ全員のデータが毎回登録されるわけではありません。
(本質問にて提示のデータですと、ユーザーマスタには ID=C がありますが、実績データテーブルには登録がありません。そのような実績のない ID は O と出力したいのです)

どのように書けばよいかわかりませんので
ご教示お願いいたします。

###期待する出力結果
(RESULT_TABLE):出力したいテーブル

MONTHIDDATA
1A202
1B204
1C0
2A210
2B212
2C0

###テーブル
(TABLE1):実績データが登録される。日を経るごとにデータは追加される。

MONTHDAYIDDATA
11A100
11B101
12A102
12B103
21A104
21B105
22A106
22B107

(TABLE2):マスタ

IDNAME
A001
B002
C003

###前提条件
MySQLを用いています。
TABLE1, TABLE2 は下記でCREATEしています。

SQL

1CREATE TABLE `TABLE1` ( 2 `MONTH` int(2) NOT NULL, 3 `DAY` int(2) NOT NULL, 4 `ID` char(4) NOT NULL, 5 `DATA` int(4) DEFAULT NULL, 6 PRIMARY KEY (`MONTH`,`DAY`,`ID`) 7) ; 8INSERT INTO `TABLE1` VALUES 9(1,1,'A',100), 10(1,1,'B',101), 11(1,2,'A',102), 12(1,2,'B',103), 13(2,1,'A',104), 14(2,1,'B',105), 15(2,2,'A',106), 16(2,2,'B',107);

SQL

1CREATE TABLE `TABLE2` ( 2 `ID` char(4) NOT NULL, 3 `NAME` char(4) DEFAULT NULL, 4 PRIMARY KEY (`ID`) 5) ; 6INSERT INTO `TABLE2` VALUES 7('A','001'), 8('B','002'), 9('C','003');

###試したこと
TABLE2と、TABLE1を月別集計したものをLEFT OUTER JOINしますが、MONTH列があるため、下記のようにID=Cは1レコードのみとなってしまいます。

MONTHIDDATA
NULLCNULL
.........

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

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

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

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

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

Orlofsky

2020/02/26 04:58

テーブル定義とデータは CREATE TABLE文とINSERT文に修正できると動作確認し易いので、適切なコメントが付き易いです。
Orlofsky

2020/02/26 04:59

>TABLE2と、TABLE1を月別集計したものをLEFT OUTER JOINしますが、MONTH列があるため、下記のようにID=Cは1レコードのみとなってしまいます。 その時のSELECT文も追記しては?
guest

回答2

0

在る月でテーブル増やして

sql

1select MONTH, ID, coalesce(DATA,0) DATA from 2 (select MONTH, ID from TABLE2, 3 (select distinct MONTH from TABLE1) TBL3 4 ) TBL4 5left join 6 (select MONTH, ID, sum(DATA) AS DATA from TABLE1 group by MONTH,ID) TBL5 7using(MONTH,ID) order by MONTH,ID;

投稿2020/02/26 06:25

amura

総合スコア333

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

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

tomptei_nickow

2020/02/27 02:45

回答内のSQL文で期待する出力結果を得ることができました。 回答ありがとうございました。 こちらの内容でも同じ結果を得ることができましたが、ベストアンサーは回答の早かった方を選択させていただきました。
guest

0

ベストアンサー

1月,2月のCのデータが無く月を判断することができないのでそのままだと無理です

投稿2020/02/26 05:05

yambejp

総合スコア114779

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

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

yambejp

2020/02/26 05:16

無理やりやるならこんな感じ create table datas(month int,day int,id varchar(10),data int); insert into datas values (1,1,'A',100), (1,1,'B',101), (1,2,'A',102), (1,2,'B',103), (2,1,'A',104), (2,1,'B',105), (2,2,'A',106), (2,2,'B',107); create table master(id varchar(10),name varchar(10)); insert into master values ('A','001'), ('B','002'), ('C','003');
yambejp

2020/02/26 05:16

select t2.month,t1.id,t1.name,coalesce(t3.data,0) as data from master as t1 inner join (select distinct month from datas) as t2 on 1 left join (select month,id,sum(data) as data from datas group by month,id) as t3 on t1.id=t3.id and t2.month=t3.month order by month,id
tomptei_nickow

2020/02/27 02:44

回答内のSQL文で期待する出力結果を得ることができました。 回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問