Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

ニャーQL勉強会(エンジニアでないメンバーがSQLを身につける勉強会)

294 views

Published on

エンジニアでないメンバーがSQLを身につける勉強会をやりました。そのなかで参加者が苦労した点や、続けてもらうコツ、解き方のコツなどと、勉強会後の活用具合についてです。

Published in: Education
  • Be the first to comment

  • Be the first to like this

ニャーQL勉強会(エンジニアでないメンバーがSQLを身につける勉強会)

  1. 1. Ginza.rb / みんなのウェディング くどう けんいち
  2. 2. まずは見てください
  3. 3. エンジニアじゃない同僚たちが 自分で作ったものです
  4. 4. エンジニアじゃない同僚たちとやった SQLの勉強会について話します。
  5. 5. 自己紹介 くどう(@ken1flan) エンジニャー 趣味 ● ヘタなイラスト ● 文具 ● こまかいものをつくる
  6. 6. Ginza.rb 主催のひとり。にぎやかしでミートアップ募集ページの絵を描いてる。 よく徳用カルパスさん来てくれてます。 それで自分に登壇を持ちかけてくれた次第で、ここにいます。
  7. 7. みんなのウェディング
  8. 8. データ分析基盤の普及 2016年ごろ、誰でも使えるデータ分析基盤が整備https://blog.mwed.info/posts/wedding- dwh-status-2016-06.html ↓ エンジニアやごく少数のエンジニア以外でSQLを使えるひとだけが利用 ↓ 便利さやだれでも使えることが馴染んできた ↓ SQLに興味を持つひとが増えてきたが、どうやって学んだらよいかわからない
  9. 9. 背中をおした データの分析をしたいので抽出してほしいという依頼がよくあった。 調整後抽出し直しもしばしば。 ↓ それぞれでSQLが使えるように手助けしたら、仕事がラクになりそう ↓ みんなで勉強しましょう。わからないところは教えますから!
  10. 10. 教材 SQL書き方ドリル 羽生 章洋/和田 省二/菅井 大輔 技術評論社 https://gihyo.jp/book/2016/978-4-7741-8066-3 業務で使うのはSELECTのみなので↓だけにしました。 ● 2章 ひとつのテーブルを扱う ● 3章 複数のテーブルを扱う ニ ャ|
  11. 11. もくじより 第2章ひとつのテーブルを扱う その1 データを取り出す 顧客一覧を出してくれ その2 複数の列を指定する 商品ごとの単価を出してくれ その3 列に別名をつける 項目の名前がわからない その4 列の値に対して演算を行う 税込価格で一覧を出してくれ その5 列同士で演算を行う 社員の健康状態を一覧で出してくれ その6 文字列の連結を行う 名札を作ってくれ その7 集合関数を使う 平均を教えてくれ その8 ある条件でレコードを絞り込む(1) 身長が大きな人を 教えてくれ その9 ある条件でレコードを絞り込む(2) 「〜子」という名 前の人の人数を教えてくれ その10 列の値に条件を設定する 単価別にランク付けしてみて くれ その11 グループ単位で集計する 都道府県別の顧客数を教えて くれ その12 グループ単位で集計した結果を絞り込む(1) 顧客数が 3人以上の都道府県を教えてくれ その13 グループ単位で集計した結果を絞り込む(2) 法人客の 数が2人以上の都道府県を教えてくれ その14 クロス集計を行う 社員の血液型別の人数ってどうなっ てるんだろう その15 並び替えを行う 単価の安い順に商品名を出してくれ その16 重複を排除する 住所一覧を出してくれ 第3章複数のテーブルを扱う その1 副問い合わせを使う 販売数量がゼロの商品を教えてくれ その2 複数テーブルの結合を行う(1) 再び都道府県別の顧客 数を教えてくれ その3 複数テーブルの結合を行う(2) 部門別の平均給与額を 教えてくれ その4 外部結合を使う 全部の商品の平均販売単価を教えてくれ その5 自己結合を使う セット商品の候補を考えてくれ その6 相関副問い合わせを使う 商品別の平均販売数量よりも多 く売れている日を教えてくれ その7 UNION ALLを使う 顧客と社員の名前一覧を出してくれ その8 UNIONを使う 重複のない顧客・社員の名前一覧にしてく れ その9 INTERSECTを使う 給料日に販売をした社員の一覧を出 してくれ その10 EXCEPTを使う 販売をしたことがない社員の一覧を出 してくれ
  12. 12. 形式 ● 毎朝 9:30 〜 10:00 ● 事前に予習してくる ○ 例題、解説を読む ○ 演習問題をやってくる ● 勉強会中にわからなかったことを訊く ● 解いてきた演習問題を前で発表する ● 1セクションあたり、1〜2回でやると、1ヶ月半〜2ヶ月程度かかる。 ○ 長くなると続かないような気がしたので、あまり終わらないときには切り上げて次に進む感 じで…。 ● 参加者は5人→10人(途中で増えました)
  13. 13. 予習・発表の形式にしたねらい デメリット 参加ハードルが上がってしまう メリット 聴くだけでなく、手を動かしてほしい 発表することで、キチンとやってきたことをみんなでほめたい 発表できなかったひとも、同じ立場のひとが解いた事実から 自分もできそうだと思えそう
  14. 14. 参加者がつまづいたところ ● WHERE ● 集計 ● JOIN ● UNION ● 整数と実数の演算結果の差 ● 日付、タイムスタンプ、UNIX時間の間の変換、タイムゾーン ● 関数の入れ子が苦手 ● NULLと0 ● カラムの横持ちのときのCASE ● 副問合せ
  15. 15. とことん付き合うことにした 理解が浅くなるセクションが増える せっかく勉強会をやってもSQLを使えるようになれないかも… エンジニアの仕事が減らない 勉強会中の様子を見たとき「使えるようになりたい」という気持ちが強そう 期間が延びてしまっても続けてがんばってくれそう やりきろう 期間が延びてもいいや ドリルをちゃんと全部解いてもらうぞ
  16. 16. いろいろくふうしました💡
  17. 17. 💡 参加意欲に関するくふう むずかしくなってきたのでテンションが落ち気味っぽかったので、楽しくしたい ● 発表シール ○ 演習問題の回答を前で発表してくれたひとに ○ 金色のシールをプレゼント ● 出席シール ○ 勉強会に出席したひとに ○ 銀色の小さいシールをプレゼント 書き込み式のドリルと相性最高 がんばった様子がひと目でわかる!
  18. 18. 💡 解き方に関するくふう(1) ● 自分が仕事で書いたクエリをシェア ○ 誰かが使っているものというと生々しいでしょ? ○ SELECTで出すときにいろいろしたりするし… ○ そういうところを見て、ちょっとしたコツを掴んでもらえれば…。 ● 例題のライブコーディング ○ ドリルは書き順があってよいのですが、一回で書き上げています。 ○ 参加者も同じように一回で書こうとして、エラーで困ったりしてました…。 ○ ホントは一回で書かないですよね? ○ 普段自分が書く雰囲気を伝えたかったので、試行錯誤しながら解いていく様子を見せました。
  19. 19. 💡 解き方に関するくふう(2) ● ベン図の紹介 ○ エンジニア以外のひとたちは集合や論理演算に慣れていません ○ WHEREのところでANDやORを使うところで違和感を感じ…UNIONで気づきました。 ○ イメージで補助するツールとして紹介しました。 ● テーブル関連図をみんなで描いてもらう ○ JOINがなかなか飲み込めてなさそうでした。 ○ 実際に線をひっぱってもらいました。
  20. 20. 💡 復習に関するくふう ● 分析用データベースを使った復習問題 ○ 次のセクションの前に、前回の復習を出しました ○ 分析用のデータベースを使ったので、仕事にすぐ活かせそうで、やる気が湧いていた。 ● 章末で参加者同士で作った復習問題 ○ 章が終わったタイミングでやりました。 ○ 分析用のデータベースを使ってお互いに出してもらう形式です。 ○ 出題者が解答も準備してもらうので、復習必須。 ○ ひとに問題を出すのって、身の入り方が違うでしょ
  21. 21. 実際にかかった時間 第2章 ひとつのテーブルを扱う 07/04 その1 データを取り出す 07/05 その2 複数の列を指定する 07/06 その3 列に別名をつける 07/09 その4 列の値に対して演算を行う 07/11 その5 列同士で演算を行う 07/12 その6 文字列の連結を行う 07/18 その7 集合関数を使う 07/19 その8 ある条件でレコードを絞り込む(1) 07/23 mwedのデータをある条件で絞り込む 07/24 mwedのデータをある条件で絞り込む 07/25 その9 ある条件でレコードを絞り込む(2) 07/26 その10 列の値に条件を設定する 07/27 その11 グループ単位で集計する 07/30 その12 グループ単位で集計した結果を絞り込む(1) 08/01 その13 グループ単位で集計した結果を絞り込む(2) 08/02 その14 クロス集計を行う 08/03 その14 クロス集計を行う(つづき) 08/06 その14 クロス集計を行う(つづき) 08/08 その15 並び替えを行う 08/16 その15 並び替えを行う(つづき) 08/17 その16 重複を排除する 08/21 みんなの2章復習問題(1) 08/23 みんなの2章復習問題(2) 08/24 みんなの2章復習問題(3) 第3章 複数のテーブルを扱う 08/27 その1 副問合せを使う 08/29 その1 副問合せを使う 08/30 その2 複数テーブルの結合を行う(1) 08/31 その2 複数テーブルの結合を行う(1) 09/03 その3 複数テーブルの結合を行う(1) 09/05 その3 複数テーブルの結合を行う(2) 09/06 その3 複数テーブルの結合を行う(2) 09/07 その4 外部結合を使う 09/10 その4 外部結合を使う 09/12 その4 外部結合を使う 09/11 その4 外部結合を使う 09/12 その4 外部結合を使う 09/13 その5 自己結合を使う 09/14 週番号を得る 09/18 その5 自己結合を使う 09/19 その5 自己結合を使う 09/20 その6 相関副問合せを使う 09/25 その6 相関副問合せを使う 09/26 その6 相関副問合せを使う 09/27 その6 相関副問合せを使う 10/03 その7 UNION ALLを使う 10/04 その7 UNION ALLを使う/その8 UNIONを使う 10/05 その8 UNIONを使う 10/09 その8 UNIONを使う/その9 INTERSECTを使う 10/10 その9 INTERSECTを使う 10/11 その9 INTERSECTを使う 10/12 テーブルの関連を図に描く 10/15 その10 EXCEPTを使う 10/16 みんなの3章復習問題 10/17 みんなの3章復習問題 10/18 みんなの3章復習問題 10/19 みんなの3章復習問題 10/20 みんなの3章復習問題 10/23 みんなの3章復習問題 10/24 みんなの3章復習問題 10/25 みんなの3章復習問題 10/29 みんなの3章復習問題 10/31 みんなの3章復習問題 11/01 みんなの3章復習問題 11/02 みんなの3章復習問題 11/05 みんなの3章復習問題 11/06 みんなの3章復習問題 11/08 みんなの3章復習問題 11/09 みんなの3章復習問題 11/12 join/union/with 11/13 redash visualization 11/14 その他 11/15 その他 11/16 その他 WHERE 復習 LEFT OUTER JOIN 相関 副問合せ テーブルの関連図 復習 グラフ化な ど補足
  22. 22. 💡 打ち上げに関するくふう 長い時間かけてやってきたのですから。 ● 卒業シール! ○ 金のペンでニャーQLとかいてあります。 ● 打ち上げランチ ○ ちょっと高いランチ ○ ノンアルコールスパークリングワイン
  23. 23. 終わってみて
  24. 24. 理解度アンケート(n=7) 第2章ひとつのテーブルを扱う その1 データを取り出す 顧客一覧を出してくれ その2 複数の列を指定する 商品ごとの単価を出してくれ その3 列に別名をつける 項目の名前がわからない その4 列の値に対して演算を行う 税込価格で一覧を出してくれ その5 列同士で演算を行う 社員の健康状態を一覧で出してくれ その6 文字列の連結を行う 名札を作ってくれ その7 集合関数を使う 平均を教えてくれ その8 ある条件でレコードを絞り込む(1) 身長が大きな人を 教えてくれ その9 ある条件でレコードを絞り込む(2) 「〜子」という名 前の人の人数を教えてくれ その10 列の値に条件を設定する 単価別にランク付けしてみて くれ その11 グループ単位で集計する 都道府県別の顧客数を教えて くれ その12 グループ単位で集計した結果を絞り込む(1) 顧客数が 3人以上の都道府県を教えてくれ その13 グループ単位で集計した結果を絞り込む(2) 法人客の 数が2人以上の都道府県を教えてくれ その14 クロス集計を行う 社員の血液型別の人数ってどうなっ てるんだろう その15 並び替えを行う 単価の安い順に商品名を出してくれ その16 重複を排除する 住所一覧を出してくれ 第3章複数のテーブルを扱う その1 副問い合わせを使う 販売数量がゼロの商品を教えてくれ その2 複数テーブルの結合を行う(1) 再び都道府県別の顧客 数を教えてくれ その3 複数テーブルの結合を行う(2) 部門別の平均給与額を 教えてくれ その4 外部結合を使う 全部の商品の平均販売単価を教えてくれ その5 自己結合を使う セット商品の候補を考えてくれ その6 相関副問い合わせを使う 商品別の平均販売数量よりも多 く売れている日を教えてくれ その7 UNION ALLを使う 顧客と社員の名前一覧を出してくれ その8 UNIONを使う 重複のない顧客・社員の名前一覧にしてく れ その9 INTERSECTを使う 給料日に販売をした社員の一覧を出 してくれ その10 EXCEPTを使う 販売をしたことがない社員の一覧を出 してくれ
  25. 25. 実際の活用度合い
  26. 26. まとめ ● 自分でデータを活用したいひとはたくさん ● 自在に取り出すためのSQLがハードル ● 各々で学習するのは二の足を踏んでるが、サポートすればやるひとは多い ● サポートは…長期にわたるので覚悟はいる ● データを活用したいひとは、学習後に本当に活用している! ぜひ、みなさんも エンジニアでない人たちのSQLの勉強をサポートして、 自分の手を使わずに 業務改善をしてもらったり、開発スピードをあげてください!
  27. 27. 資料について このスライドは @ken1flanのTwitterなどで公開します。 ほぼ同じものを くふうカンパニー Advent Calendar 2018 で公開します https://qiita.com/advent-calendar/2018/kufu このスライドで使ったイラストは… LINEスタンプとして販売…はわかりません。
  28. 28. ご清聴 ありがとうございました
  29. 29. 質問ありましたらどうぞー

×