Slide 1

Slide 1 text

SQL Meister ΁ͷಓ @ma2k8 2020-10-31 ~جૅʙࢀরฤ~

Slide 2

Slide 2 text

໨࣍ - SQL͸͍͍ͧ - ༻ޠղઆͱجຊͷཱͪճΓ - SQL(ΫΤϦ)ͬͯͳΜͧ - ςʔϒϧͬͯͳΜͧ - σʔλϕʔεͬͯͳΜͧ - ڞ௨Ͱ࢖͑ΔWHERE۟Λ֮͑Α͏ - SELECTจͰσʔλΛݟͯΈΑ͏ - SELECTจͷจ๏ - ࣮ߦ - ΫΤϦ࣮श(redashͷ࢖͍ํ) - ΫΤϦ࣮श(SELECT&WHERE) - ू߹ͷײ֮Λ௫Ή - JOIN͕Ͱ͖Ε͹͍ͬͪΐલ - ΫΤϦ࣮श(JOIN) - ूܭΫΤϦ ~ूܭؔ਺~ - ूܭΫΤϦ ~group by~ - ΫΤϦ࣮श(ूܭΫΤϦ) - αϒΫΤϦ - ΫΤϦ࣮श(αϒΫΤϦ)

Slide 3

Slide 3 text

SQL͸͍͍ͧ

Slide 4

Slide 4 text

SQL͸ίεύͷ͍͍εΩϧ ࡢࠓɺϏδωεͱΤϯδχΞϦϯά྆ํ෼͔Δਓ͕ॏๅ͞Ε͍ͯ·͕͢ɺ ΤϯδχΞϦϯάʹΉͪΌͪ͘ΌಛԽ͍ͯ͠Δඞཁ͸ͳ͘ɺϓϩμΫτͷσʔλ ߏ଄Λ೺ѲͰ͖͍ͯͯɺ޻਺ݟੵ΍ػೳ։ൃͷ೉қ౓͕͋Δఔ౓ਪଌͰ͖Δͱɺ ։ൃ׆ಈͷղ૾౓্͕͕Γɺෆ֬ఆཁૉΛݮΒ͢͜ͱͰ৴པ஍ͷߴ͍൑அ͕Ͱ͖ ΔͨΊॏๅ͞Ε͍ͯ·͢ɻ SQL͕ॻ͚Δͱ͍͏͜ͱ͸ɺσʔλߏ଄Λ೺Ѳ͢ΔखஈΛಘΔͱ͍͏͜ͱͰɺ͜ ͷྗ͸͔ͳΓڧ͍ͷͰ΍͍͖ͬͯ·͠ΐ͏ʂ

Slide 5

Slide 5 text

༻ޠղઆͱجຊͷཱͪճΓ

Slide 6

Slide 6 text

ΫΤϦ(SQL)ͬͯͳΜͧ ΫΤϦͱ͍͏ͷ͸ɺσʔλʹରͯ͠ͳΜΒ ͔ͷૢ࡞Λߦ͏ͨΊͷݴޠͰ͢ɻ ཈͓͑ͯ͘΂͖จ๏ͷछྨ͸ͨͬͨͷ4ͭɻ SELECTจ、UPDATEจ、INSERTจ、DELETEจ ͚ͩͰ͢ɻ ͔͠΋ڞ௨Ͱ࢖͑Δ෦෼͕ͨ͘͞Μ͋Δͷ Ͱɺ1֮ͭ͑ͨΒ͙͢शಘͰ͖Δ͔΋ʂ

Slide 7

Slide 7 text

ςʔϒϧͬͯͳΜͧ ςʔϒϧͱ͍͏ͷ͸ɺσʔλ͕ೖͬͯΔ ശͷ͜ͱͰ͢ɻ ςʔϒϧʹ͸ߏ଄(εΩʔϚ)͕͋ͬͯɺ ཁ͸ܗ͕ܾ·͍ͬͯ·͢ɻ ΫΤϦΛ࡞Δͱ͖͸͜ͷߏ଄Λҙࣝ͢Δ ඞཁ͕͋ΔͷͰɺͲ͏͍͏ςʔϒϧ͕ଘ ࡏ͢Δ͔ͱɺߏ଄Λ֬ೝ͢ΔίϚϯυΛ ͓͖֮͑ͯ·͠ΐ͏ɻ テーブルは要は👇こういうイメージ

Slide 8

Slide 8 text

ςʔϒϧͬͯͳΜͧ `show tables` ͱ͍͏ίϚϯυͰɺ ςʔϒϧͷҰཡΛ֬ೝͰ͖·͢ɻ ࣗ෼͸ࡉ͔͍ςʔϒϧ໊ͱ͔֮͑ͯͳ ͍ͷͰΊͬͪΌΑ͘ୟ͖·͢ɻ ~ςʔϒϧҰཡΛ֬ೝ͢Δͧ~ 黒い画面!怖くないよ!

Slide 9

Slide 9 text

ςʔϒϧͬͯͳΜͧ `desc ςʔϒϧ໊` ͱ͍͏ίϚϯυͰɺ ςʔϒϧͷߏ଄Λ֬ೝͰ͖·͢ɻ ΫΤϦΛॻ͘ͱ͖͸ߏ଄Λߏ੒͢Δɺ Filed(ΧϥϜ໊)Λҙࣝ͢Δඞཁ͕͋Γ ·͢ɻ ~ςʔϒϧͷߏ଄Λ֬ೝ͢Δͧ~ クエリ書くときはFieldってとこに書いてある列名だけ押さえればOK 要はエクセルの列名を確認してる感じですね

Slide 10

Slide 10 text

σʔλϕʔε(DB)ͬͯͳΜͧ σʔλϕʔε(DB)ͱ͍͏ͷ͸ɺςʔϒϧΛ· ͱΊͨ΋ͷͰ͢ɻ DBαʔόʔͷ͜ͱΛ෺ཧDBɺ͜ͷςʔϒϧ ͷ·ͱ·ΓΛ࿦ཧDBͱݺΜͰ۠ผͨ͠Γ͠ ·͢ɻ `show databases` ͰDBͷҰཡΛ֬ೝͰ͖ ·͢ɻ infomation_schemeは勝手に作られる あんまり気にしないでいいやつで、 alp_subscription_sandboxが我々の定義したテーブルが 入ってるDBです

Slide 11

Slide 11 text

σʔλϕʔε(DB)ͬͯͳΜͧ ΫΤϦΛ࣮ߦ͢Δࡍʹ͸ɺͲͷDBʹର͠ ࣮ͯߦ͢Δ͔બ୒͢Δඞཁ͕͋Γ·͢ɻ `use σʔλϕʔε໊` ͱ͢Δͱબ୒͢Δ ͜ͱ͕Ͱ͖·͢ɻ ෺ཧDBʹϩάΠϯͨ͠Β·ͣ࠷ॳʹɺ࿦ ཧDBΛબ୒͠·͠ΐ͏ɻ alp_subscription_sandboxを使うぞ!!

Slide 12

Slide 12 text

͜ͷล͸redashͱ͔࢖͑͹ ͋Δఔ౓ҙࣝ͠ͳ͍ͰࡁΈ·͕͢ɺ ͓͍֮͑ͯͯଛ͸ͳ͍Ͱ͢ʂ (࣮शͰ͸redash࢖͍·͢👍)

Slide 13

Slide 13 text

ڞ௨Ͱ࢖͑Δ WHERE۟Λ֮͑Α͏

Slide 14

Slide 14 text

WHERE۟ͬͯͳΜͧ WHERE۟͸ɺର৅ͷσʔλΛߜΔͨΊͷ৚ ݅Ͱ͢ɻ AND,ORͰ৚݅ΛͲΜͲΜ଍͍͖ͯ͠ɺࣗ ෼ͷ໨తͱ͢ΔσʔλΛಛఆ͢ΔͨΊʹ࢖ ͍·͢ɻ ͦͯ͠ɺWHERE۟͸ɺSELECTจ、UPDATE จ、DELETEจͰ࢖͑Δڞ௨ͷ஌ࣝͰ͢ʢί εύྑ͍Ͷʂʣ 要はエクセルのフィルタみたいなイメージですねʙ でも、エクセルのフィルタよりもっと柔軟で便利!

Slide 15

Slide 15 text

WHERE۟ͬͯͳΜͧ WHERE۟Ͱ͸ɺ ׬શҰகɺ෦෼ҰகɺϦετҰக(Ϧετ಺ͷͲΕ͔ʹ׬શҰக)ͷ৚݅ ͕࢖͑·͢ɻ ׬શҰக͸ `${ΧϥϜ໊} = “৚݅"` ෦෼Ұக͸`${ΧϥϜ໊} LIKE “%৚݅%”` ϦετҰக͸ `${ΧϥϜ໊}` IN (“৚݅1”,“৚݅2”,“৚݅3”) ͱ͍͏Α͏ʹࢦఆͰ͖·͢ɻ ͜ΕΒͰSELECTͳΒࢀর͢Δର৅ɺINSERT,UPDATE,DELETEͳΒߋ৽͢Δ ର৅ΛߜΓ·͢ɻ 条件をまとめないと結果が変わる部分は()でまとめます 掛け算割り算と同じノリです! ※しれっとLIMITを使ってますが、これは件数を制限するやつです! データ量多すぎてうっとおしい時は件数を絞りましょう

Slide 16

Slide 16 text

WHERE۟ͬͯͳΜͧ ઌఔͷ׬શҰகɺ෦෼ҰகɺϦετҰக(Ϧετ಺ͷͲΕ͔ʹ׬શҰக)ͷ৚݅͸ɺ൱ఆ ͷ৚݅ʹ΋࢖͑·͢ɻ ׬શҰகͷ൱ఆ͸ `${ΧϥϜ໊} != “৚݅”` ෦෼Ұகͷ൱ఆ͸`${ΧϥϜ໊} NOT LIKE “%৚݅%”` ϦετҰகͷ൱ఆ͸ `${ΧϥϜ໊}` NOT IN (“৚݅1”,“৚݅2”,“৚݅3”) ͱ͍͏Α͏ʹࢦఆͰ͖·͢ɻ

Slide 17

Slide 17 text

SELECTจͰ σʔλΛݟͯΈΑ͏

Slide 18

Slide 18 text

SELECTจͷจ๏ SELECT * -> ࢀর͢ΔΧϥϜ໊Λࢦఆɻجຊ͸શ෦Λҙຯ͢Δ`*`ͰOK FROM ${ςʔϒϧ໊} -> ࢀর͢Δςʔϒϧ໊Λࢦఆ WHERE ${৚݅} -> ৚݅Λࢦఆ

Slide 19

Slide 19 text

࣮ߦ DBを確認して選択 テーブル一覧を確認 テーブル構造とデータの内容を確認 クエリを組み立てて実行!

Slide 20

Slide 20 text

஫ҙ ΊͪΌͪ͘Ό݅਺͕ଟ͔ͬͨΓɺΧϥϜʹͰ͔͍σʔλͷೖͬͨςʔϒϧʹΏΔ͍৚݅ͷΫΤϦΛ࣮ߦ͠ ͯ͠·͏ͱɺ݁ՌΛฦ͢ͷʹ͕͔͔࣌ؒͬͨΓෛՙΛ͔͚ͯ͠·͍·͢ɻ ͦΜͳͱ͖͸ɺͱΓ͋͑ͣ݅਺ΛߜΔ limitͩͬͨΓɺऔಘ͢ΔΧϥϜΛ໌ࣔ͢ΔΑ͏ʹ͠·͠ΐ͏ɻ SELECT id,name -> ࢀর͢ΔΧϥϜ໊Λࢦఆ FROM ${ςʔϒϧ໊} -> ࢀর͢Δςʔϒϧ໊Λࢦఆ WHERE ${৚݅} -> ৚݅Λࢦఆ LIMIT 10 -> 10͚݅ͩऔಘɻWHEREͳ͠ͰɺFROMͷޙΖʹ௚઀ࢦఆ͢Δ͜ͱ΋Ͱ͖Δ

Slide 21

Slide 21 text

ΫΤϦ࣮श(redashͷ࢖͍ํ) ①https://redash.scalebasecamp.com にアクセスしてください。 ②Create->Queryを選択 ③Databaseを選択。今回はdevelopmentで! ④あとはクエリを書いて [⾣Execute] で実行するのみ! 間違ったクエリ書いても大丈夫なので書いてみましょ!

Slide 22

Slide 22 text

ΫΤϦ࣮शᶃ(SELECT & WHERE) Addressςʔϒϧ͔ΒɺҎԼͷ৚݅ͰσʔλΛऔಘ͠·͠ΐ͏ɻ - prefecture͕ “TOKYO”(=) ͔ͭ(and) - address_line1ʹ”3ஸ໨”ؚ͕·ΕΔ(like) ͔ͭ(and) - ( city͕”ौ୩۠”(=) ΋͘͠͸(or) தԝ۠(=) )

Slide 23

Slide 23 text

ΫΤϦ࣮शᶄ(SELECT & WHERE) Addressςʔϒϧ͔ΒɺҎԼͷ৚݅ͰσʔλΛऔಘ͠·͠ΐ͏ɻ - prefecture͕ “TOKYOͰ͸ͳ͍”(!=) ͔ͭ(and) - city͕ [”೔໺ࢢ”,”ࡳຈࢢ”]ͷ͍ͣΕ͔(in)

Slide 24

Slide 24 text

ू߹ͷײ֮Λ௫Ή

Slide 25

Slide 25 text

ू߹ͬͯͳΜͧ ू߹ͱ͍͏ͷ͸Ϟϊͷू·ΓͰ͢ɻ ςʔϒϧ͸ʮςʔϒϧఆٛʹैͬͨσʔλͷू߹ʯͱଊ͑Δ͜ͱ͕Ͱ͖ ·͢ɻ

Slide 26

Slide 26 text

WHERE۟ͱON۟͸෦෼ू߹ΛऔΓग़͢࢓૊Έ WHERE句やON句で写像を作る。 この写像は参照元の部分集合になる。 もちろん、空集合になることもある。 この矢印がSELECTだとすると、結果Aは テーブルBの部分集合となります。 こう考えると、WHERE句を指定しないと 全データが更新されるイメージもつくかも? テーブル ※超厳密に言うと、カラムはSELECT節で自己定義 できるので部分集合でないパターンもありますが、 WHEREはざっくりこういうイメージということで🙏 ※ON۟͸JOINʹ࢖͏ߏจͰ͜ͷޙग़͖ͯ·͢ɻWHEREͱಉ͡৚݅ࢦఆ͕Ͱ͖Δ΍ͭͰɺ JOINͷ৚݅ΛࢦఆͰ͖·͢ɻ

Slide 27

Slide 27 text

JOIN΍αϒΫΤϦɺूܭΫΤϦͰ ͜ͷߟ͑ํ͕ॏཁʹͳΔ

Slide 28

Slide 28 text

JOIN͕Ͱ͖Ε͹͍ͬͪΐલ

Slide 29

Slide 29 text

JOINͬͯͳΜͧ JOIN͸ෳ਺ͷςʔϒϧΛ߹ମͤ͞ΔٕͰ͢ɻ ʮςʔϒϧఆٛʹैͬͨσʔλͷू߹ʯͳͷͰɺςʔϒϧಉ࢜ͷఆٛΛ ૊Έ߹Θͤͯू߹Λ͕ͬͪΌΜ͜Ͱ͖ΔͷͰ͢ɻ ΄ͱΜͲͷέʔεͰɺσʔλΛࢀর͢Δ࣌(SELECT)ʹ࢖͍·͢ɻ

Slide 30

Slide 30 text

JOINͷछྨ

Slide 31

Slide 31 text

No content

Slide 32

Slide 32 text

No content

Slide 33

Slide 33 text

JOINͷछྨ ͨ͘͞Μछྨ͸͋Γ·͕͢ɺ࣮ࡍ࢖͏99%͸LEFT JOINͱINNER JOINͳͷ Ͱ͜ͷ2ͭΛ͓͚֮͑ͯ͹OKɻ

Slide 34

Slide 34 text

INNER JOINͰ σʔλΛݟͯΈΑ͏

Slide 35

Slide 35 text

INNER JOINจͷจ๏ SELECT * -> ࢀর͢ΔΧϥϜ໊Λࢦఆɻجຊ͸શ෦Λҙຯ͢Δ`*`ͰOK FROM ${ςʔϒϧ໊A} -> ࢀর͢Δςʔϒϧ໊Λࢦఆ INNER JOIN ${ςʔϒϧ໊B} -> JOIN͍ͨ͠ςʔϒϧ໊Λࢦఆ ON ${৚݅} -> WHERE۟ͱಉ͡ॻ͖ํͰ৚݅Λࢦఆ͢Δɻ͜͜ͷ৚݅͸ݫ͍͠΄͏͕ JOIN͢Δର৅͕গͳ͘ͳΔͷͰύϑΥʔϚϯε΋ྑ͘ͳΔɻ WHERE ${৚݅} -> ৚݅Λࢦఆ

Slide 36

Slide 36 text

INNER JOINͰԿ͕ى͖Δ͔ ͲΜͳಈ͖Λ͢Δͷ͔ɻdogsςʔϒϧʹownerςʔϒϧΛɺ dogs.owner_idͱowner.idͰINNER JOIN͢ΔͱҎԼͷ༷ʹͳΓ·͢ɻ

Slide 37

Slide 37 text

INNER JOINͰԿ͕ى͖Δ͔ dogs.owner_id = owner.id ͷ৚݅Λຬͨ͞ͳ͍ߦ͕ল͔Εͨ݁Ռ͕खʹೖΔ͜ ͱ͕Θ͔Γ·͢ɻdogs.owner_idʹಉ͡ID͕͋ΔͷͰɺ݁Ռʹ΋ಉ͡ownerςʔ ϒϧͷߦ͕ෳ਺ೖΔ͜ͱʹ΋஫ҙ

Slide 38

Slide 38 text

INNER JOINͰԿ͕ى͖Δ͔ ͜ΕΛϕϯਤͰද͢ͱ👇 JOINݩɺJOINઌɺ྆ํʹҰகͨ͠෦෼͚ͩऔΓग़͢ͷ͕INNER JOINͰ ͢ɻ

Slide 39

Slide 39 text

LEFT JOINͰ σʔλΛݟͯΈΑ͏

Slide 40

Slide 40 text

LEFT JOINจͷจ๏ SELECT * -> ࢀর͢ΔΧϥϜ໊Λࢦఆɻجຊ͸શ෦Λҙຯ͢Δ`*`ͰOK FROM ${ςʔϒϧ໊A} -> ࢀর͢Δςʔϒϧ໊Λࢦఆ LEFT JOIN ${ςʔϒϧ໊B} -> JOIN͍ͨ͠ςʔϒϧ໊Λࢦఆ ON ${৚݅} -> WHERE۟ͱಉ͡ॻ͖ํͰ৚݅Λࢦఆ͜͜ͷ৚݅͸ݫ͍͠΄͏͕JOIN͢ Δର৅͕গͳ͘ͳΔͷͰύϑΥʔϚϯε΋ྑ͘ͳΔɻ WHERE ${৚݅} -> ৚݅Λࢦఆ INNER JOINとほぼ一緒だぜ!

Slide 41

Slide 41 text

LEFT JOINͰԿ͕ى͖Δ͔ ͲΜͳಈ͖Λ͢Δͷ͔ɻdogsςʔϒϧʹownerςʔϒϧΛɺ dogs.owner_idͱowner.idͰLEFT JOIN͢ΔͱҎԼͷ༷ʹͳΓ·͢ɻ

Slide 42

Slide 42 text

LEFT JOINͰԿ͕ى͖Δ͔ LEFT(ࠨ)ͱ͍͏ͷ͸ɺJOINݩςʔϒϧͷ͜ͱͰ͢ɻ(RIGHT JOIN΋͋Δ) JOINݩΛ༏ઌͯ͠JOIN͠Ζͱ͍͏͜ͱͰɺdogs.owner_id = owner.id ͷ৚݅Λຬͨ͞ͳͯ͘΋ɺJOINݩ ͷߦ͕ল͔Εͣʹ݁Ռ͕खʹೖΔ͜ͱ͕Θ͔Γ·͢ɻ

Slide 43

Slide 43 text

LEFT JOINͰԿ͕ى͖Δ͔ ͜ΕΛϕϯਤͰද͢ͱ👇 JOINݩ͸༏ઌ͠ɺJOINઌ͕Ұகͨ͠ΒऔΓग़͠ɺJOINઌʹҰக͢Δߦ ͕ͳ͚Ε͹NULLͰຒΊͯऔΓग़͢ͷ͕LEFT JOINͰ͢ɻ

Slide 44

Slide 44 text

ΫΤϦ࣮श(JOIN) providerςʔϒϧͱcloud_sign_settingςʔϒϧΛJOINͯ͠Έ·͠ΐ͏ɻ - දࣔ͢ΔΧϥϜ͸👇 - providerςʔϒϧ͔Βcompany_name - cloud_sign_settingςʔϒϧ͔Βauto_create_contract - LEFTͱINNERɺ྆ํͷ࣮ߦ݁ՌΛ֬ೝͯ͠Έ·͠ΐ͏

Slide 45

Slide 45 text

ूܭΫΤϦ ~ूܭؔ਺ฤ~

Slide 46

Slide 46 text

SELECT΍WHERE߲໨ʹ͸ΧϥϜ͚ͩͰ͸ͳ͘ɺܭࢉΛͯ͘͠ΕΔؔ਺Λࢦఆ͢Δ͜ͱ͕Ͱ͖·͢ɻ Α͘࢖͏ͷ͸5ͭ => SUM,AVG,MAX,MIN,COUNT ͜ΕΒ͸ޙड़ͷGROUP BYͱ૊Έ߹Θͤͯ࢖͏͜ͱͰޮྗΛൃش͠·͢ɻ ※👇ͷΑ͏ʹ୯ମͰ΋࢖͑·͢͸͠·͢ɻ ूܭؔ਺ͬͯʁ // customerςʔϒϧͷ૯݅਺Λग़͢ > SELECT COUNT(*) FROM customer; // ͋Δproviderͷcustomerͷ૯਺ΛͱΔ > SELECT COUNT(*) FROM customer WHERE provider_id = "aaa";

Slide 47

Slide 47 text

ूܭΫΤϦ ~GROUP BYฤ~

Slide 48

Slide 48 text

GROUP BYͬͯʁ GROUP BY͸ɺࢦఆͨ͠ΧϥϜͰ݁ՌΛ·ͱΊͯ͘Ε·͢ɻ ઌఔͷ👇ͷूܭΫΤϦ͸1ͭͷϓϩόΠμͷquantity߹ܭΛूܭ͍ͯ͠·͢ɻ GROUP BY͸ϓϩόΠμຖͷquantityͷ߹ܭΛશͯݟ͍ͨ৔߹ʹ࢖͑·͢ɻ // ͋Δproviderͷcustomerͷ૯਺ΛͱΔ > SELECT COUNT(*) FROM customer WHERE provider_id = "aaa"; // ܖ໿ຖͷbilling_itemͷquantity૯਺ΛͱΔ > SELECT provider_id, COUNT(*) FROM customer GROUP BY provider_id;

Slide 49

Slide 49 text

GROUP BYͬͯʁ GROUP BYͰ͸ɺෳ਺ͷΧϥϜΛࢦఆ͢Δ͜ͱ΋Ͱ͖·͢ɻ // contract,contract_charge_item_idຖͷbilling_itemͷquantity૯਺ΛͱΔ > SELECT contract_id, contract_charge_item_id, sum(quantity) FROM billing_item GROUP BY contract_id,contract_charge_item_id;

Slide 50

Slide 50 text

Πϝʔδਤ GROUP BYͰ͸ɺෳ਺ͷΧϥϜΛࢦఆ͢Δ͜ͱ΋Ͱ͖·͢ɻ // contract,contract_charge_item_idຖͷbilling_itemͷquantity૯਺ΛͱΔ > SELECT contract_id, contract_charge_item_id, sum(quantity) FROM billing_item GROUP BY contract_id,contract_charge_item_id;

Slide 51

Slide 51 text

ෳ਺ࢦఆ͢Δͱ͖͸σʔλͷߏ଄Λҙࣝ͢Δ ෳ਺ࢦఆ͢Δࡍ͸σʔλߏ଄తʹҙຯͷ͋Δ΋ͷͰ͋Δ͔Λҙࣝ͢Δඞཁ ͕͋Γ·͢ɻ 1ϖʔδલͷΫΤϦ݁Ռͷߏ଄Λ1ܖ໿෼நग़͢Δͱ👇ͷΑ͏ʹͳΓ·͢ɻ group by contract_id とすると、quantityは5になる group by contract_id,contract_charge_item とすると、 quantityは2,2,1とcontract_charge_itemでもgroup化される

Slide 52

Slide 52 text

ΫΤϦ࣮श(ूܭΫΤϦ) billingςʔϒϧ͔ΒɺϓϩόΠμ͝ͱͷtotal_billing_priceͷ߹ܭ஋Λग़ͯ͠Έ·͠ΐ͏ ৄࡉͳ৚݅͸ҎԼ👇 - total_billing_unit͕”YEN” - provider_idͰgroupԽ - total_billing_priceͷ߹ܭ஋(SUM)Λूܭ - දࣔ͢Δ߲໨͸provider_id, total_billing_priceͷ߹ܭ஋

Slide 53

Slide 53 text

αϒΫΤϦ

Slide 54

Slide 54 text

αϒΫΤϦ ςʔϒϧ͸ʮςʔϒϧఆٛʹैͬͨσʔλͷू߹ʯɺΫΤϦͷ݁Ռ͸ʮ෦෼ू߹ʯͱͯ͠ଊ͑ΒΕΔલड़͠·ͨ͠ɻ αϒΫΤϦ͸ɺʮ෦෼ू߹ʯΛΫΤϦʹ૊ΈࠐΉ͜ͱͰ͢ɻ SELECTจʹ͓͚ΔཁૉΛͬ͘͟Γઆ໌͢Δͱ👇ͷΑ͏ʹͳΓ·͢ɻ ${ू߹} ͱॻ͍ͯ͋Δ෦෼͸ී௨ʹॻ͘ͱςʔϒϧ͕ೖΓ·͕͢ɺΫΤϦͰ࡞ͬͨʮ෦෼ू߹ʯΛ౰ͯ͸ΊΔ͜ͱ ΋Ͱ͖·͢ɻ ͜Ε͕αϒΫΤϦͰ͢ɻ SELECT ${ू߹ͷཁૉ} FROM ${ू߹} XXX JOIN ${ू߹} ON ${ू߹ͷཁૉʹΑΔ৚݅} WHERE ${ू߹ͷཁૉʹΑΔ৚݅}

Slide 55

Slide 55 text

Ͳ͏ॻ͘ͷʁ ${ू߹} ͷ෦෼Λ ()ͰғͬͨSELECTจʹஔ͖׵͑·͢ɻ ͜Μͳײ͡Ͱॻ͖·͢ɻ(΍΍͍͜͢͠Ͷʘ(^o^)ʗ) SELECT ${ू߹ͷཁૉ} FROM ( SELECT * FROM ${ू߹} WHERE aa=“xx” ) XXX JOIN ( SELECT * FROM ${ू߹} WHERE aa=“xx” ) ON ${ू߹ͷཁૉʹΑΔ৚݅} WHERE ${ू߹ͷཁૉʹΑΔ৚݅}

Slide 56

Slide 56 text

ΩϨΠʹॻ͚Δwith ※MySQLͰ͸ɺ5.8͔ΒͷػೳͳͷͰScalebaseͰ͸·ͩ࢖͑ͳ͍ͷͰ͕͢ɺαϒΫΤϦͷཧղʹ໾ͨͪͦ͏ͳͷͰҰԠࡌͤ·͢ɻ αϒΫΤϦ͸ɺ෦෼ू߹ʹ໊લΛ͚ͭͯςʔϒϧͷ༻ʹѻ͏ख๏Ͱ͢ɻ ͜ΕΛΘ͔Γ΍͘͢ॻ͚Δwith۟ͱ͍͏΋ͷ͕͋Γ·͢ɻ ཁ͸ઌʹ෦෼ू߹Λ࡞໊ͬͯલΛ͚ͭɺͦͷ໊લΛΫΤϦ಺Ͱར༻͍ͯ͠Δ͚ͩͰ͕͢ɺೖΓ૊Μͩߏ଄͕ղফͰ͖ΔͷͰΧφϦ ಡΈ΍͘͢ͳΓ·͢ɻ WITH tableA as ( SELECT * FROM ${ू߹} WHERE aa=“xx” ), tableB as ( SELECT * FROM ${ू߹} WHERE aa=“xx” ) SELECT ${ू߹ͷཁૉ} FROM tableA XXX JOIN tableB ON ${ू߹ͷཁૉʹΑΔ৚݅} WHERE ${ू߹ͷཁૉʹΑΔ৚݅}

Slide 57

Slide 57 text

ͳΜʹ࢖͏ͷʁ ςʔϒϧ͚ͩΛࡐྉʹΫΤϦΛ૊ΈཱͯΔͱɺͲ͏ͯ͠΋ूܭͷ୯Ґ͕߹Θͳ͘ͳ͍͖ͬͯ·͢ɻ ྫ͑͹ɺcontractͷςʔϒϧ͔Βʮࠓ೥։࢝ͨ͠ܖ໿ʯͱɺʮࠓ݄։࢝ͨ͠ܖ໿ʯΛऔಘ͍ͨ͠ͱ͠·͢ɻ αϒΫΤϦͳ͠Ͱී௨ʹॻ͘ͱɺ୯Ґ͕ҧ͏ͷͰ1౓ͷΫΤϦͰऔಘ͢Δ͜ͱ͸Ͱ͖·ͤΜɻ αϒΫΤϦͩͱɺ👇͜Μͳײ͡Ͱॻ͘ͱҰ౓ʹͱΕ·͢ɻ جຊతʹ͸ɺҰ౓ʹऔಘ͢Δඞཁ͕͋Δͷ͸෼ੳΫΤϦͱ͔ͳͷͰɺௐࠪ΍ঢ়گ֬ೝͰ͸ී௨ʹผʑͷΫΤϦͰ2ճʹ෼͚ͯऔΔ΄͏͕ྑ͍Ͱ͢ɻ SELECT y.provider_id, m.this_month_begin_num, y.this_year_begin_num FROM ( SELECT provider_id, COUNT(*) as this_year_begin_num FROM contract WHERE DATE_FORMAT(contract_begin_date, “%Y”) = DATE_FORMAT(now(), “%Y”) ) m LEFT JOIN ( SELECT provider_id, COUNT(*) as this_month_begin_num FROM contract WHERE DATE_FORMAT(contract_begin_date, “%Y-%M”) = DATE_FORMAT(now(), “%Y-%M”) ) y ON m.provider_id = y.provider_id

Slide 58

Slide 58 text

ΫΤϦ࣮श(αϒΫΤϦ) billingςʔϒϧ͔ΒɺҎԼͷ৚݅👇ͰσʔλΛऔಘ͍ͯͩ͘͠͞ - billing_date͕ࠓ݄ʹͳ͍ͬͯΔσʔλͷtotal_billing_priceͷ߹ܭ - billing_date͕ࠓ೥ʹͳ͍ͬͯΔσʔλͷtotal_billing_priceͷ߹ܭ ※👇͕ ࠓ݄ͷbilling_dateΛऔಘ͢Δ৚݅ DATE_FORMAT(billing_date, “%Y-%M”) = DATE_FORMAT(now(), “%Y-%M”) ※👇͕ ࠓ೥ͷbilling_dateΛऔಘ͢Δ৚݅ DATE_FORMAT(billing_date, “%Y”) = DATE_FORMAT(now(), “%Y”)

Slide 59

Slide 59 text

͜ΕͰSQL Meister ΁ͷಓ~ࢀরฤ~ ͸मྃͰ͢ɻ ࡉ͔͍ߏจͱ͔͸ɺׂͱຖճάάͬͨΓͯ͠ΔͷͰ Ͳ͏͍͏ಈ͖Λ͢Δ͔ͷΠϝʔδ͑͞ग़དྷ͍ͯΕ ͹ྑ͍ͱࢥ͍·͢ʂ ͋ͱ͸ॻ͖·͘Δ͚ͩʂ