shinoblog-manabu

Progate(プロゲート)を使って初歩の初歩からプログラミング勉強をはじめました。無料から有料バージョンへ以降しつつ、自分辞書として活用しています。なるべく私と同じ初心者目線を使い、各プログラミング内容を説明したいです。

【SQL道場コース】総合演習問題 複雑なユーザーデータの分析【Progate】

f:id:shinoblog-manabu:20201211153341j:plain

 

複雑なユーザーデータの分析

問1

SELECT 〇〇

設問の通り、3つのデータを取得する

  • ユーザーIDを取得する
  • ユーザー名を取得する
  • カウント関数を使い、"購入数"名に変換する

users.id, users.name, count(*) AS "購入数"

COUNT関数を使う。これは指定したカラムの合計数を計算してくれる

 

ただし、「NULLも含めたカウント関数」を使うこと。

分からなければ下記参照

prog-8.com


FROM 〇〇

取得データ内訳

  • 設問の対象ユーザーデータを取得するために、どの「テーブル」を選ぶべきか考える

 

JOIN 〇〇

  • 購入したユーザーの記録」をつなげる必要がある、と考える。するとどのカラムを結合するかが分かるようになる

複数テーブルを1つに結合するための作業

 


ON 〇〇

下記をそれぞれ結合条件とする

  • 販売データ
  • ユーザーデータ

ONとは、JOIN(結合)にたいする「条件」(ON)を指す

ON データ同士を "=" によってつなげること


テーブルA.カラム名 = テーブルB.カラム名

Aに対するカラム名は外部キーを、テーブルBにたいするカラム名は主キーを指定する

 

 

 

GROUP BY 〇〇

それぞれのカラム内IDをグループ化すること。ヒントは見本にもある通り、usersのID,nameである。

  • 見本のIDから考察
  • 見本のnameから考察

GROUP BY カラム名

カラム名.ID, カラム名.name ←どこにも =をつかっていない。

 

 

 


HAVING 

「条件を満たすグループを取得」したい時、HAVINGを使う。条件は下記の通り。

  • 10個以上購入したユーザー

HAVING 条件 この様に書く

何日~”以上”購入とあるので、>= という関係演算子を使用する

分からなければ下記参照

ja.wikipedia.org

 

問1まとめ

  • SELECT 何を知りたいの?(問題文)
  • FROM その知りたいソースはどのテーブルから持ってくるの?
  • JOIN 'FROM'とどのテーブルをつなげたいの?
  • ON じゃあJOINに書いたテーブル同士をつなげるための共通IDをちょうだい。
  • GROUP BY データをグループ化する作業にはいるから、グループ化したいカラム名をそれぞれちょうだい。(問題文から考察)
  • HAVING データ取得には何か条件あったよね?その条件をここに書いてね
  • ;(セミコロン)を書いて終了でーす。

 

 

 

f:id:shinoblog-manabu:20201128102518j:plain

ここからヒント形式のような文言を書きました。考えながらスムーズに答えを導くトレーニングをするためです。分からなければ答えを見る。そしえ、「どうして?」「なぜ?こうなったのか」を追求するだけです。

問2

問2の解答要約:購入・売上記録からユーザーID,特定商品の販売記録を取得する。それにはJOINをつかって異なるカラム同士をつなげ、データ取得する。

 


SELECT

  • 何を知りたいの?(問題文)

 


FROM 

  • その知りたいソースはどのカラムデータから持ってくるの?


JOIN

  • 'FROM'とどのテーブルをつなげたいの?

 


ON 

  • ON じゃあJOINに書いたテーブル同士をつなげるための共通IDをちょうだい。ID書いてなかったらIDを取得すること!(FROM テーブルID と SELECT テーブルID)

 


WHERE

  • どの「横の行」(レコード)のデータが欲しいの?それから、そのレコードデータを求めるにはもう一回クエリを書かなければいけない。そうだ、サブクエリ"()"  を使ってデータを1つにまとめちゃおう。

 

  SELECT 

  • 何を知りたいの?(問題文)そもそもWHEREでは何を知りたかったのかを表示すれば良いだけだよ。


  FROM

  • その知りたいソースはどのカラムデータから持ってくるの?

 


  WHERE

  • どの「横の行」(レコード)のデータが欲しいの?そしてそのレコード名は何ていうの?(サブクエリここまで)


  GROUP BY 

  • データをグループ化する作業にはいるから、グループ化したいカラム名をちょうだい。(問題文から考察)

 

 セミコロン

  • そして終わったら;(セミコロン)を忘れないようにね!