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

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

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

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

Q&A

解決済

2回答

1442閲覧

MySQLの結合について

mayoi_maimai

総合スコア1583

MySQL

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

0グッド

1クリップ

投稿2017/10/24 06:08

以下、注文テーブルの「PR_CODE」で広告クリックテーブルと結合し、注文情報とクリック情報を取得したいのですが、PR_CODEが【000000】のように注文テーブルには無いが、広告クリックテーブルにはクリック数がある場合や、注文テーブルにはあるが広告クリックテーブルが無いといった場合にうまく取得ができませんでした。
このような場合でもSQLで取得できるのでしょうか。

バージョン:mysql5.6.36

###注文テーブル(ORDER_MST)
|ORDER_ID|PR_CODE|ORDER_PRICE|TAX
|:--:|:--:|
|10000|000001|5000|400
|10001|000001|10000|800
|10002|000002|10000|800
|10003|zzzzzz|10000|800

###広告クリックテーブル(PR_CLICK)

PR_CODECLICK_CNT
00000010
00000120
00000230

###試したこと

SQL

1SELECT 2 ORDER_MST.PR_CODE, 3 SUM(ORDER_MST.ORDER_PRICE) as ORDER_PRICE, 4 SUM(ORDER_MST.TAX) as TAX 5FROM 6 ORDER_MST 7LEFT JOIN 8 PR_CLICK 9ON 10 ORDER_MST.PR_CODE = PR_CLICK.PR_CODE 11GROUP BY 12 ORDER_MST.PR_CODE 13

###取得したい結果

PR_CODEORDER_PRICETAXCLICK
000000NULLNULL10
00000115000120020
0000021000080030
zzzzzz10000800NULL

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

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

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

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

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

guest

回答2

0

ベストアンサー

こんな感じです

元データ

SQL

1create table ORDER_MST(ORDER_ID varchar(10),PR_CODE varchar(10),ORDER_PRICE int,TAX int); 2insert into ORDER_MST values 3('10000','000001',5000 ,400), 4('10001','000001',10000,800), 5('10002','000002',10000,800), 6('10003','zzzzzz',10000,800); 7 8create table PR_CLICK(PR_CODE varchar(10),CLICK_CNT int); 9insert into PR_CLICK values 10('000000',10), 11('000001',20), 12('000002',30); 13

集計

SQL

1select t1.PR_CODE,t2.ORDER_PRICE,t2.TAX,t3.CLICK_CNT as CLICK 2from (select PR_CODE from ORDER_MST UNION select PR_CODE from PR_CLICK) as t1 3left join (select PR_CODE,SUM(ORDER_PRICE) as ORDER_PRICE,SUM(TAX) as TAX from ORDER_MST group by PR_CODE) as t2 4on t1.PR_CODE=t2.PR_CODE 5left join PR_CLICK as t3 6on t1.PR_CODE=t3.PR_CODE 7order by PR_CODE asc 8

投稿2017/10/24 06:27

yambejp

総合スコア114784

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

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

mayoi_maimai

2017/10/24 06:50

早急なご回答ありがとうござい枚ます。 UNIONは今まであまり使ったことが無かったので非常に勉強になりました!
guest

0

こんな感じでしょうか。
最初に両テーブルからPR_CODEの一覧を抽出して、それにLEFT JOINで必要なデータをくっつけていくイメージです。

SQL

1select * from 2( 3 select a.pr_code, b.order_price, b.tax, c.click_cnt from 4 ( 5 select pr_code from order_mst 6 union 7 select pr_code from pr_click 8 ) a 9 left join 10 ( 11 select pr_code, sum(order_price) as order_price, sum(tax) as tax from order_mst group by pr_code 12 ) b on a.pr_code=b.pr_code 13 left join pr_click c on a.pr_code=c.pr_code 14 group by a.pr_code 15) d 16order by pr_code;

投稿2017/10/24 06:48

ttyp03

総合スコア16998

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

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

mayoi_maimai

2017/10/24 06:52

ご回答ありがとうございました。 解説がありイメージしやすかったですm(_)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問