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

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

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

dateは、date型や日付に関する関数や処理についてのタグです

MySQL

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

SQL

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

データマイニング

データマイニングは、購買履歴やクレジットカードの利用履歴、電話の通話履歴など企業にある大量のデータを解析して、その中に隠れたパターンやルールを探し出す技術です。DMと略されることもあります。

Q&A

2回答

1850閲覧

mysqlのクエリでデータの前処理をするさいに欠損値を埋める方法

sequelanonymous

総合スコア123

date

dateは、date型や日付に関する関数や処理についてのタグです

MySQL

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

SQL

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

データマイニング

データマイニングは、購買履歴やクレジットカードの利用履歴、電話の通話履歴など企業にある大量のデータを解析して、その中に隠れたパターンやルールを探し出す技術です。DMと略されることもあります。

0グッド

0クリップ

投稿2020/12/10 13:16

編集2020/12/11 03:40

下記のような問題のときに2018年に絞って各地域ごとのアイスの総売上をだしたいとします。
出力結果は、state_name, product_name, total_salesのカラムでだします。
このとき、私は下記記載のクエリでいけると思いましたが、これだと、2017年には購入していたplace.placeの場所の2018年の売上が0の場合は出力されません。
つまり、下記のテーブルでいうと、Chicagoのmellow candyが2018年は0なのにもかかわらず出力結果として下記のクエリだと出力されません。
そして、実際には無いデータを出力するようにクエリを書く必要があるのかなと思っています。

どなたか、こういった場合どうかけばいいのかご存知でしたらご教示頂けると幸いです。

mysql

1select 2pl.place as state_name, 3pr.name as product_name, 4sum(s.quantity*pr.price) 5from sales s 6left join price pr on pr.id = s.id 7left join place pl on pl.id = s.id 8where s.date = 2018 9group by state_name, product_name

priceテーブル

idnameprice
1ice candy60000
2coke candy50000
3candy20000
4mellow candy10000
....
....
....

placeテーブル

idplace
1kansas
2NewYork
3Chicago
....
....
....

salesテーブル

product_idstate_idquantitydate
2222018
3352019
2322018
43102017
....
....
....

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

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

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

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

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

FKM

2020/12/11 02:36

テーブルデータ結合の基本ができていない気がします。何を使って結合しているか、SQLとは別個で考えた方がいいのでは。
sequelanonymous

2020/12/11 03:42

すみません、ご確認させてください。結合の基本について、どの部分でなぜできてないと思いましたでしょうか?そんなに間違えたクエリを書いていない気がしたのでとても気になっています。
FKM

2020/12/11 04:06

パット見どれがマスタでどれがトランザクションなのか分かりづらいですし、結合している条件もなんか不自然です。SQLで考える前にテーブル正規化に基づいた設計から考え直してみた方がいいのではないかと思うわけです。
sequelanonymous

2020/12/11 04:44

設計はもともとのありもののサンプルでもし、こういったテーブル定義があった場合にどうやって抽出対象を抽出するクエリを書くか、について悩んでいます。で、その場合にleft joinの部分が間違っているのかなと思ったのですが、具体的にわからずで、すみません、なぜ不自然になってると思いますでしょうか?
guest

回答2

0

Chicagoのmellow candyが2018年は0なのにもかかわらず出力結果として下記のクエリだと出力されません。

地域や商品を基準にしたいのに、SQLでの基準が売上になっているからです。

投稿2020/12/12 01:33

sazi

総合スコア25327

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

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

sequelanonymous

2020/12/13 10:00

ありがとうございます。理解に近づけそうな気がしました。 つまり、下記のようなクエリを書いて、priceに対してsalesテーブルをleft joinすれば、salesテーブルにないprice idのものは、0としてレコードが追加されて出力される、という理解であっていますでしょうか? select pl.place as state_name, pr.name as product_name, sum(s.quantity*pr.price) from price pr left join sales s on pr.id = s.id left join place pl on pl.id = s.id where s.date = 2018 group by state_name, product_name
sazi

2020/12/13 12:24

そういう事です。 price とplace の両方を基準にしたいなら、これらをcross joinしたものにsales をouter joinですね。
guest

0

  • カレンダーテーブルを別途用意するか
  • プロシージャなので都度テンポラリーテーブルを作成するか

で対応できます

投稿2020/12/11 06:39

yambejp

総合スコア116724

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

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

sequelanonymous

2020/12/13 10:01

ありがとうございます。解決案のご提示とても助かります。できるだけ、tempテーブルとカレンダーなしにできないかどうか、考えています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問