すべてを可能にする数学脳のつくり方

 

はい。すべてを可能にする数学脳のつくり方 苫米地 英人 (著)

を読みました。数学に抵抗感のある人はとても勇気が出る本なのでおすすめであります。以下要点。

数学は言語である

数学が理解できないのは表記がわからないからである

フェルマーの最終定理

3 以上の自然数 n について、xn + yn = zn となる自然数の組 (xyz) は存在しない

数学の最難問も表記を理解すれば一般人にも意味がわかるようになる

不確定性原理

デルタは誤差のこと。

xはロケーションで位置を意味する。

pはベロシティで運動量と方向と定義されるが、今回は運動量とする。

hはプランク定数で10のマイナス34乗くらいの数字のさらに半分のごく小さな数字。

位置と運動量の誤差は、必ずごく小さな数字以上にはなるという意味で「すべての存在は不確定だ」という意味になる。

つまり、この式は「この世に確定的なものはなにもないことを表す数式」なのである

法律は矛盾だらけ

この世に確定的なものは全くないにも関わらず、確定的なものとして無理やりに制定された憲法や法律のようなものは数学的世界に反する行いであり、世界の矛盾や無駄は憲法や法律に依拠することで始まることが多い。

幸福の基準は量ではなく変化

Aさんは資産を400万円持っている。ある日投資に失敗して資産を300万円に減らしてしまった。

Bさんは資産を100万円持っている。ある日投資が成功して資産を110万円に増やすことができた。

過去の経済学では資産を多く持っているAさんの方が幸福だとしてきたが、実際に私達が幸せだと感じるのはあきらかにBさんの方である

コンフォートゾーンの作り方

はい。前回からの続きです。この本読みました。

コンフォートゾーンの作り方【聴くだけで目標達成できる!CD付】~図解TPIEプログラム~ 苫米地英人 (著)

コンフォートゾーンとはなんじゃい?

本文中より、

コンフォートゾーンとは、現状を維持しようとする、
「脳」と「心」のメカニズムです。

著者の苫米地氏曰く、各人 の現状の生活は各人が現状を望んでいる結果であって、もしも年収500万円(月の手取り約30万円)の生活をしている人が、急に月収が倍になって、年収1000万円になったとしても、その生活に違和感を感じて浪費やミスを重ねて起こして、元の年収500万円ほどの生活を維持するそうです。

逆に、年収500万円を目指している人が、なんらかの理由で年収250万円(月の手取り約16万円)になっている場合は、収入が上がるイベントが重ねて起こるそうです。

つまり、現在の生活はその人が望んだ結果であって、それ以上やそれ以下の生活を望めば自然とそうなるということです。なるほど。

 

氏の主張は一貫して、

自信を持って前向きに望む生活をリアルに思い浮かべれば努力が努力にならずにその通りのものを得られる。

というものです。

その通りだと思います。

 

いろいろやりたい事があるんでそれ終わったら

やる気の記事の修正やな

本当はすごい私

はい。

本当はすごい私 一瞬で最強の脳をつくる10枚のカード 苫米地 英人 (著)

を読みました。

きっかけはYouTubeで苫米地氏のこの動画がおすすめされて見たこと

この動画が確信を突いた内容だったので氏の本を読んでおこうと思いました。

努力は不要

正確に言うと「今の自分がダメ」という前提は成功に必要ないということで、「すでに自分は最高の状態」なので「成功して当たり前」なのです。

また、未来の「成功した自分」が原因で、現在があるとしています。

最高の自分に気づく

「今の自分がダメ」ではなく「今の自分が最高」だと気づくために氏は以下のステップがあるとしています。

1.とりあえずのゴールを決める

「社長になる」「年収を10倍にする」などの達成できそうな目標を決めます。

2.そのゴールを実現する

その目標を達成します。達成すると当然、次の目標が心の中から発生します。

3.最高の自分を見つける

実は上記の1と2はイメージの中で行っても同様の効果があります。とりあえずの目標が「社長になる」なら、社長になった時の仕事や生活を徹底的にイメージしてみます。

そうすると、そのゴールを実現した時と同様に、「こんな生活なら別にいいかな・・」とか思えてきて「実はこういう生き方をしたいんだよなあ・・」というのが出てきます。

これを繰り返すことで自分にとって本当に重要な最高の自分を見つけることができます。

 

はい。ざっくりまとめると以上です。細かいところが気になる人は読んでください。次回はコンフォートゾーンについてまとめます。

パウロ・コエーリョのアルケミスト

 

はい。パウロ・コエーリョのアルケミストをよみました。

きっかけは↓の動画でウィル・スミス氏がインタビューで大好きな本として挙げていたからです。

いわゆる引き寄せの法則( law of attraction )について童話風な物語仕立てで学ぶことができます。

どことなくドラゴンクエストVの原作になった旅のラゴスと似たような雰囲気も感じますがラゴスは旅の目的が終始はっきりしなかったのとは対照的にアルケミストの方は「宝を見つける」というはっきりとした目的が存在します。

この最後に見つけるお宝が普通の金銀財宝だったんで、がっかりした記憶なのですが、紆余曲折を乗り越えた主人公の精神そのものがよっぽどお宝です。たぶん。著者は最後、わかりやすいハッピーエンド的なものにしたかったのでしょう。

主人公のタフさ

この物語の主人公はお宝を探す旅の途中、何度も全財産を失います。

・海を超えた新天地で泥棒に全財産騙し取られる

・砂漠の道中で軍隊から接収される

・宝をほっている途中でチンピラに絡まれてカツアゲされる

この主人公が凄いのが全財産を失うたびに「それはともかく旅を進めよう」という頑丈なメンタルを持っていることです。

特に最初の一回目は新天地に一人でいたこともあり一日泣いてたりするんですが、次の二回目になるともはや大したダメージにならず、三回目に至っては全く気にしてません

彼は自分のことをどろぼうに会ったあわれな犠牲者と考えるか、宝物を探し求める冒険家と考えるか、そのどちらかを選ばなくてはならないことに気がついた。
「僕は宝物を探している冒険家なんだ」と彼は自分に言った。

宇宙の意思

ちなみにこの主人公、宇宙の意志と同化しています。なのでどんな困難があってもめげないですし、いろいろな幸運をもぎとって旅を続けることができます。

・ピラミッドの近くに宝がある啓示を夢の中でみる

・ジプシーの老女にそれが本物だと言われる

・正体不明のエルサレムの王様メルキゼデクと会ってエジプトまでの船代をもらう

主人公「世界最大のうそとは何ですか?」

メルキゼデク「それはこうじゃ、人は人生のある時点で、自分に起こってくることをコントロールできなくなり、宿命によって人生を支配されてしまうということだ。それが世界最大のうそじゃよ」

メルキゼデク「誰でも若い時は自分の運命を知っているものなのだ。
まだ若い頃は、すべてがはっきりしていて、すべてが可能だ。
夢を見ることも、自分の人生に起こってほしいすべてのことにあこがれることも、恐れない
ところが、時がたつうちに、不思議な力が、自分の運命を実現することは不可能だと、彼らに思い込ませ始めるのだ」

メルキゼデク「おまえが誰であろうと、何をしていようと、おまえが何かを本当にやりたいと思う時は、その望みは宇宙の魂から生まれたからなのだ。
それが地球におけるおまえの使命なのだよ。
自分の運命を実現することは、人間の唯一の責任なのだ。すべてのものは一つなんだよ。
おまえが何かを望む時には、宇宙全体が協力して、それを実現するために助けてくれるのだよ」

愛とは?

この本では割と面倒なことをすべて「愛」という言葉で片付けてしまう表現が散見されます。愛なら仕方ない

愛とは、大いなる魂を変え、より良いものにする力なのです。

また、愛が旅を邪魔するものでは決してないと説いています。

男が自分の運命を追求するのを、愛は決して引き止めはしないということを、おまえは理解しなければいけない。もし彼がその追求をやめたとしたら、それは真の愛ではないからだ・・・大いなることばを語る愛ではないからだ。

ここらへんは「結婚にメリットはない」と語るミニマリストの堀江貴文氏とは微妙に意見が別れているところです。

「勇気」とは「怖さ」を知ることッ!「恐怖」を我が物とすることじゃあッ!

割とジョジョの一部っぽいものも散見します(両作で神話なんかの同じモチーフを採用してる関係なんだと思います)。

恐怖に負けてはいけないよ

恐怖に負けてしまうと、お前は心に話しかけることが
できなくなってしまうからね

もし、自分の運命を生きてさえいれば、
知る必要のあるすべてのことを、人は知っている
しかし夢の実現を不可能にするものが、
たった一つだけある
それは失敗するのではないかという恐れだ

下記はツェペリさんのセリフです。

ノミっているよなあ・・・ちっぽけな虫ケラのノミじゃよ!
あの虫はわれわれ巨大で頭のいい人間にところかまわず攻撃を仕掛けて 戦いを挑んでくるなあ!
巨大な敵に立ち向かうノミ・・・これは『勇気』と呼べるだろうかねェ
ノミどものは「勇気」とは呼べんなあ

それではジョジョ!「勇気」とはいったい何か!?

「勇気」とは「怖さ」を知ることッ!「恐怖」を我が物とすることじゃあッ!
人間讃歌は「勇気」の讃歌ッ!!
人間のすばらしさは勇気のすばらしさ!!
いくら強くてもこいつら屍生人は「勇気」を知らん!
ノミと同類よォーッ!!

いやーいい本だ。

ポスト・ヒューマン誕生

 

はい。レイ・カーツワイル氏のポスト・ヒューマン誕生をもりもり読んでおります。

あの、俳優のウィル・スミス氏が枕元に置いておかないと落ち着いて眠れないと噂される本でございます。

とても内容が濃い上に辞書並の厚さがあって読み応えがあります。読んでいて頭が良くなっていってる気がするのは攻殻機動隊マスター・キートン以来であります。

科学者の悲観主義

氏は「たいてい、目の前にある問題の難しさや複雑な細部に気を取られすぎていて、自分の研究がもつ長期的意義を見失ったり、研究分野をより広い視野で捉えることを忘れてしまったりしがちだ。」と言う。

ともにひとびとの間に、指数関数的成長収穫加速の法則が頭に入っていないからだと警告する。

また、「今日のあるひとつの傾向から導かれる変化にだけ注目し、他のことがらはなにひとつとして変わらない、としてしまうことだ。その格好な例が、寿命が伸びすぎると、人口が過剰になり、限りある資源が枯渇して生活が成り立たなくなる。と懸念されていることだ。この場合は、ナノテクノロジーや強いAIを用いて、その分に見合った大きな富を算出できることが忘れられている。」と述べている。

技術の進歩による弊害が出る頃には、他の技術の進歩の応用によってかんたんに解決できるとしている。

指数関数的成長

この本を貫く思想がこちらです。

指数関数的成長とは、初期は緩やかに進化し技術が確立すると急速に進化すること。

様々な人がこの指数関数的成長を見落としていて、進化のペースを遅く評価しすぎてしまっているとのこと。

氏、曰く人類の進歩は10年毎に2倍になっているとのこと。

収穫加速の法則

氏の提唱する発明と進歩に関する法則。

一つの重要な発明は他の発明と結びつき、次の重要な発明の登場までの期間を短縮し、イノベーションの速度を加速することにより、科学技術は直線グラフ的ではなく指数関数的に進歩するという法則のこと。

ムーアの法則

インテル社のゴードン・ムーア名誉会長が1965年に予測した、半導体の集積度は2年で倍増するという法則。

予測から52年が経過した、2017年現在もインテル社はこの法則が健在であると主張している。

原子データストレージ

オクラホマ大学の研究チームは、19個の水素原子を含む1個の分子にある陽子間の磁気相互作用の中に、1024ビットの情報を保存することに成功した。

2017年には、IBMが単一の原子にデータを読み書きすることに成功した

人間の脳のシミュレート

氏は、人間レベルの知能を10^16 cpsのコンピューティングと10^13ビットのメモリがあれば再現可能としています。

強いAI

コンピュータが強いAIと呼ばれるのは、人間の知能に迫るようになるか、人間の仕事をこなせるようになるか、幅広い知識と何らかの自意識を持つようになったときである。

ちなみに、やや疑問を持つ声もあるが、2014年にチューリングテストに合格する人口知能が登場している

 

あと、人間の寿命に関しては他の人のまとめ見て下さい。

いやーすごい本だ。

「生産消費者」の時代

アルビン・トフラーの「生産消費者」の時代

を読みました。

以前に言及したジェレミー・リフキン氏の「限界費用ゼロ社会」と同様に未来の社会についての予測をした本です。

トフラーに関しては日本語のWikiでも概要を知ることができます

この本では、トフラーと評論家の田中直毅氏との対談形式で話が進んでおり、「第三の波」や「富の未来」と比べてだいぶ読みやすく情報もまとまっています。

第三の波

トフラーが提唱する、人類が経験してきた大変革のこと。

第一の波は1万年前の「農業革命」で狩猟や採集に頼っていた人類の生活を根底から覆した。

第二の波は18世紀(西暦1701年から1800年)に起きた「産業革命」で工業化による大量生産の時代が開始した。

第三の波は1990年代後半から現在にまで続いているコンピュータとインターネットがもたらした「情報革命」の事で、知識に基づく経済社会への移行をし始めている。

生活スタイルの違い

第一の波で登場した、農業中心の生活スタイルは、集団の単位は家族。時間に縛られることはありません。

第二の波で登場した、工業中心の生活スタイルは、集団の単位は会社や工場。時間を守り会社や工場のルールに従う必要がある。

第三の波で登場した、情報中心の生活スタイルは、集団の単位は個人やコミュニティ。時間の制限や細かなルールは創造性を妨げるため存在しない。

組織形態とそのスピード

企業は時速100kmでトップを走る。創造力豊かな個人とコミュニティをいくつも内包するGoogleやIBM、Amazon、マイクロソフトといった企業は、新しい技術や市場の変化に敏感に対応し、製品や組織内部を即座に変えて対応することができる。

NGOやNPOの社会団体は時速90kmで小回りがきくネットワークを活かして、俊敏に対応することができる。

家族は時速60kmでリモートワークなどの新しいライフスタイルの登場でその機能は急速に様変わりしている。

労働組合は時速30kmで創造力が最重要視される仕事が多くなる中で役割を失いつつある。

官僚機構は時速25kmで工業中心の社会ではうまく機能していましたが情報社会ではただの害悪

公教育制度は時速10km

国際的統治機関は時速5km

政治の構造は時速3km

法律は時速1km

と続きます。これらはそのスピードの致命的な遅さから誰にも相手をされず既に形骸化している。

特に、時速30kmより遅い組織形態に関しては、その組織形態が本当に必要なのかを含めて、抜本的に見直す時期にきている。

世界から孤立する中東

イスラム教徒全体のレベルでシーア派とスンニ派が対立し、

次のレベルで国家間の対立

局地的に武装勢力、軍閥、テロリストが台頭する中東はアメリカでさえもすぐに解決ができない国際的な難問。

プロシューマー

OpenAimの方に書いたので割愛

 

新サイトの構想がいくつか湧いてきたのでとりあえずティザーでも作るかな。

 

限界費用ゼロ社会

限界費用ゼロ社会 〈モノのインターネット〉と共有型経済の台頭 ジェレミー・リフキン  (著), 柴田裕之 (翻訳)

を読んでます。結構、目から鱗が落ちる本なのですが、覚えておきたいことをここに残しておきます。

共有型経済の台頭

資本主義経済の次にくる経済体制。英語でいうところのSharing Economy.

なんと総務省のページに解説がある

「シェアリング・エコノミー」とは、典型的には個人が保有する遊休資産(スキルのような無形のものも含む)の貸出しを仲介するサービスであり、貸主は遊休資産の活用による収入、借主は所有することなく利用ができるというメリットがある。貸し借りが成立するためには信頼関係の担保が必要であるが、そのためにソーシャルメディアの特性である情報交換に基づく緩やかなコミュニティの機能を活用することができる。シェアリング・エコノミーはシリコンバレーを起点にグローバルに成長してきた。PwCによると、2013年に約150億ドルの市場規模が2025年には約3,350億ドル規模に成長する見込みである

え?なんか妙に限定的じゃないか総務省さん?

私は「シェアリングエコノミー」とは

物との関わりが「保有」から「アクセス」に変わった世界

だと思うのよ。

つまり、自動車を「購入」する時代は収束しつつあって、より効率的な「カーシェアリング」が選ばれる時代がゆるやかに到着しつつある。

Iot

IoTとは?|IoT:Internet of Things(モノのインターネット)とは、従来は主にパソコンやサーバー、プリンタ等のIT関連機器が接続されていたインターネットにそれ以外の様々なモノを接続することを意味します。読み方はアイオーティーです。

まあ、この教科書的な用語解説は置いておいて。

私は「Iot」とは

映像・光・音・温度等のセンサーとネットワーク機器が既存の家電に搭載され情報が可視化され蓄積できるようになること

だと思うのよ。

例えば冷蔵庫の中にカメラとwifiが搭載されて買い物中に冷蔵庫の中身をスマホから見れるようになって、ついでに賞味期限切れの食品があることを教えてくれるようなこと。

自動販売機や電飾広告にセンサーとwifiが搭載されて、人が周りに居ない時は電源がオフになったり、節電モードになって効率的に運用ができるようになること。

そして、「シェアリングエコノミー (人と物との関わり方が所有からアクセスへ変わる世界)」はIotによって、色々なタイミングで物が誰によって使用されているのか監視することによって現実化させることができる。

限界費用がゼロになる時代の到来

げんかい‐ひよう【限界費用】生産量の増加分一単位あたりの総費用の増加分。限界生産費。マージナルコスト。MC(marginal cost)

限界費用がゼロになるということは生産量に対してかかる経費がゼロになるということ。つまり生産し放題になる時代。

グリーンエネルギー

グリーンエネルギーとは、太陽光や風力、バイオマス(生物資源)、地熱、天然ガスといった自然エネルギー源です。

使用することで自然環境への負担が大きく、採掘に莫大なコストがかかる化石燃料の時代は終わり、ほぼ無尽蔵のグリーンエネルギーが限界費用ゼロの時代を支えることになります。

日本のどの家でも100万円前後で導入でき、10年ほどで償却ができるソーラーパネルを設置することで各家庭の電気代は0円になります。

また、米国ではGoogle主導のもと、広域無料Wifiの設置が一部地域で進んでいます。

プロシューマーの台頭

プロシューマーとは、consumer(消費者)とproducer(生産者)を組み合わせた造語で、製品の企画・開発に携わる消費者という意味。未来学者のアルビン・トフラー氏が著書『第三の波』で予見した新しいスタイルの消費者。多様化した消費者のニーズに応えるために、企業が消費者の意見を直接取り入れる形で、消費者が商品の企画・開発に関わるようになってきている。

既に、ソフトウェア業界では、ユーザがテストに参加し、そのデータや意見を基に改善点や開発すべき項目を決める手法が王道になってきている。消費者と生産者の垣根がなくなりつつある。

学校教育の時代錯誤

小中高の教育が輩出を目指す理想的な人材は、寡黙な工場労働者である。狭い室内で他の人と同じ工程を文句を言わず行える人材である。

現在、そのような人材を受け入れる町工場がいくつあるだろうか?学校教育は需要の存在しない人材を今日もなんの疑いもなく教育をしている。この無駄を私達が止めなければならない。

 

最後に、私達は「限界費用ゼロ社会と、より平等主義的で豊かで、生態学的に持続可能な時代へと、世界を導くことに十分貢献できる。」と信じております。

達人に学ぶSQL

 

自分の書くSQLがなんだか効率が悪い気がしてきて勉強したくなり、初めてのSQL達人に学ぶSQL徹底指南書を入手して学習してます。

せっかくなので重要そうなところをここにまとめておきます。使ってるSQLはMySqlでCloud9でテスト環境を作成してテストしてます。

■サブクエリ

・情報を取得するための、一時テーブルを生成する。
・一時テーブルは処理が終わったら破棄される。

Cloud9のMySQLにログインします。

masasikatano:~/workspace $ mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 58
Server version: 5.5.54-0ubuntu0.14.04.1 (Ubuntu)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

それからテストテーブルの作成。

mysql> use c9
Database changed
mysql> CREATE TABLE IF NOT EXISTS users (
    ->   ID int(11) unsigned AUTO_INCREMENT NOT NULL,
    ->   score int(11) NOT NULL default '0',
    ->   name text NOT NULL,
    ->   sex enum('male', 'female') NOT NULL default 'male',
    ->   updated_at TIMESTAMP NOT NULL,
    ->   created_at TIMESTAMP NOT NULL,
    ->   deleted_at TIMESTAMP NULL,
    ->   PRIMARY KEY (ID)
    -> );
Query OK, 0 rows affected (0.02 sec)

mysql> desc users;
+------------+-----------------------+------+-----+---------------------+-----------------------------+
| Field      | Type                  | Null | Key | Default             | Extra                       |
+------------+-----------------------+------+-----+---------------------+-----------------------------+
| ID         | int(11) unsigned      | NO   | PRI | NULL                | auto_increment              |
| score      | int(11)               | NO   |     | 0                   |                             |
| name       | text                  | NO   |     | NULL                |                             |
| sex        | enum('male','female') | NO   |     | male                |                             |
| updated_at | timestamp             | NO   |     | CURRENT_TIMESTAMP   | on update CURRENT_TIMESTAMP |
| created_at | timestamp             | NO   |     | 0000-00-00 00:00:00 |                             |
| deleted_at | timestamp             | YES  |     | NULL                |                             |
+------------+-----------------------+------+-----+---------------------+-----------------------------+
7 rows in set (0.00 sec)

テストデータを挿入します。

mysql> INSERT INTO users (score,name,sex,updated_at,created_at,deleted_at) VALUES
    -> (10,'masasikatano','male','2017-1-11 00:00:00','2017-6-11 00:00:00',null),
    -> (100,'concernedfennel','female','2017-1-12 00:00:00','2017-7-12 00:00:00',null),
    -> (100,'juicysubstr','male','2017-1-13 00:00:00','2017-3-13 00:00:00',null),
    -> (110,'buttheadbaron','female','2017-1-14 00:00:00','2017-4-14 00:00:00',null),
    -> (110,'hauntcyclase','female','2017-1-15 00:00:00','2017-1-15 00:00:00',null),
    -> (130,'profileasked','male','2017-1-16 00:00:00','2017-1-16 00:00:00',null),
    -> (145,'jaguarracer','female','2017-1-17 00:00:00','2017-5-21 00:00:00',null),
    -> (160,'boorishdisplay','male','2017-1-18 00:00:00','2017-3-21 00:00:00',null),
    -> (200,'baseballsecure','female','2017-1-19 00:00:00','2017-2-19 00:00:00','2017-3-20 00:00:00'),
    -> (10,'woundmille','male','2017-2-21 00:00:00','2017-2-21 00:00:00','2017-2-23 00:00:00'),
    -> (-10,'hollandaiseoncology','male','2017-3-11 00:00:00','2017-3-11 00:00:00',null),
    -> (-20,'clotpolestringed','male','2017-4-10 00:00:00','2017-4-11 00:00:00',null),
    -> (-30,'listcampus','female','2017-4-11 00:00:00','2017-4-11 00:00:00','2017-7-10 00:00:00'),
    -> (-100,'teammatemillwright','female','2017-5-11 00:00:00','2017-5-11 00:00:00',null),
    -> (0,'mongoosehalting','male','2017-6-11 00:00:00','2017-6-11 00:00:00',null),
    -> (0,'gashbam','female','2017-7-11 00:00:00','2017-7-11 00:00:00',null)
    -> ;
Query OK, 16 rows affected (0.00 sec)
Records: 16  Duplicates: 0  Warnings: 0

mysql> select * from users;
+----+-------+---------------------+--------+---------------------+---------------------+---------------------+
| ID | score | name                | sex    | updated_at          | created_at          | deleted_at          |
+----+-------+---------------------+--------+---------------------+---------------------+---------------------+
|  1 |    10 | masasikatano        | male   | 2017-01-11 00:00:00 | 2017-06-11 00:00:00 | NULL                |
|  2 |   100 | concernedfennel     | female | 2017-01-12 00:00:00 | 2017-07-12 00:00:00 | NULL                |
|  3 |   100 | juicysubstr         | male   | 2017-01-13 00:00:00 | 2017-03-13 00:00:00 | NULL                |
|  4 |   110 | buttheadbaron       | female | 2017-01-14 00:00:00 | 2017-04-14 00:00:00 | NULL                |
|  5 |   110 | hauntcyclase        | female | 2017-01-15 00:00:00 | 2017-01-15 00:00:00 | NULL                |
|  6 |   130 | profileasked        | male   | 2017-01-16 00:00:00 | 2017-01-16 00:00:00 | NULL                |
|  7 |   145 | jaguarracer         | female | 2017-01-17 00:00:00 | 2017-05-21 00:00:00 | NULL                |
|  8 |   160 | boorishdisplay      | male   | 2017-01-18 00:00:00 | 2017-03-21 00:00:00 | NULL                |
|  9 |   200 | baseballsecure      | female | 2017-01-19 00:00:00 | 2017-02-19 00:00:00 | 2017-03-20 00:00:00 |
| 10 |    10 | woundmille          | male   | 2017-02-21 00:00:00 | 2017-02-21 00:00:00 | 2017-02-23 00:00:00 |
| 11 |   -10 | hollandaiseoncology | male   | 2017-03-11 00:00:00 | 2017-03-11 00:00:00 | NULL                |
| 12 |   -20 | clotpolestringed    | male   | 2017-04-10 00:00:00 | 2017-04-11 00:00:00 | NULL                |
| 13 |   -30 | listcampus          | female | 2017-04-11 00:00:00 | 2017-04-11 00:00:00 | 2017-07-10 00:00:00 |
| 14 |  -100 | teammatemillwright  | female | 2017-05-11 00:00:00 | 2017-05-11 00:00:00 | NULL                |
| 15 |     0 | mongoosehalting     | male   | 2017-06-11 00:00:00 | 2017-06-11 00:00:00 | NULL                |
| 16 |     0 | gashbam             | female | 2017-07-11 00:00:00 | 2017-07-11 00:00:00 | NULL                |
+----+-------+---------------------+--------+---------------------+---------------------+---------------------+
16 rows in set (0.00 sec)

サブクエリでscoreが100以上のmaleのnameを抽出

mysql> SELECT U.name 
    ->   FROM
    ->        ( 
    ->          SELECT * 
    ->          FROM users 
    ->          WHERE score >= 100
    ->        ) 
    ->        AS U
    ->  WHERE sex='male';
+----------------+
| name           |
+----------------+
| juicysubstr    |
| profileasked   |
| boorishdisplay |
+----------------+
3 rows in set (0.00 sec)

合ってそうです。

LaravelのEloquentでのサブクエリの使い方は割愛

■Case式

・CASE式を使用することで、SQL中で条件制御を行うことが出来ます。

mysql> SELECT id,name,sex
    ->       ,CASE sex
    ->          WHEN 'male' THEN '男'
    ->          WHEN 'female' THEN '女'
    ->          ELSE 'another'
    ->        END 性別
    -> FROM   users;
+----+---------------------+--------+--------+
| id | name                | sex    | 性別   |
+----+---------------------+--------+--------+
|  1 | masasikatano        | male   | 男     |
|  2 | concernedfennel     | female | 女     |
|  3 | juicysubstr         | male   | 男     |
|  4 | buttheadbaron       | female | 女     |
|  5 | hauntcyclase        | female | 女     |
|  6 | profileasked        | male   | 男     |
|  7 | jaguarracer         | female | 女     |
|  8 | boorishdisplay      | male   | 男     |
|  9 | baseballsecure      | female | 女     |
| 10 | woundmille          | male   | 男     |
| 11 | hollandaiseoncology | male   | 男     |
| 12 | clotpolestringed    | male   | 男     |
| 13 | listcampus          | female | 女     |
| 14 | teammatemillwright  | female | 女     |
| 15 | mongoosehalting     | male   | 男     |
| 16 | gashbam             | female | 女     |
+----+---------------------+--------+--------+
16 rows in set (0.00 sec)

■変数

・あるステートメント内のユーザー定義変数に値を格納し、あとから別のステートメントでこれを参照できます。

mysql> SET @t1=1, @t2=2, @t3:=4;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @t1, @t2, @t3, @t4 := @t1+@t2+@t3;
+------+------+------+--------------------+
| @t1  | @t2  | @t3  | @t4 := @t1+@t2+@t3 |
+------+------+------+--------------------+
|    1 |    2 |    4 |                  7 |
+------+------+------+--------------------+
1 row in set (0.00 sec)

■OLAP

・OLAP関数というのは,OLAP(OnLine Analytical Processing)という名前のとおり,データベースを使ってリアルタイムに分析を行う処理に対応した関数のことです。DWH(Data Ware House)とかBI(Business Intelligence)の分野でよく利用されます。

・MySQLには未実装なものが多い(MariaDBにもない)

ほげえ・・

↑の変数を利用する方法があるみたいなのでやってみます。

mysql> SET @rank = 0;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT (@rank := @rank + 1) AS rank, 
    -> id ,score,name 
    -> FROM users
    -> ORDER BY score DESC;
+------+----+-------+---------------------+
| rank | id | score | name                |
+------+----+-------+---------------------+
|    1 |  9 |   200 | baseballsecure      |
|    2 |  8 |   160 | boorishdisplay      |
|    3 |  7 |   145 | jaguarracer         |
|    4 |  6 |   130 | profileasked        |
|    5 |  4 |   110 | buttheadbaron       |
|    6 |  5 |   110 | hauntcyclase        |
|    7 |  2 |   100 | concernedfennel     |
|    8 |  3 |   100 | juicysubstr         |
|    9 |  1 |    10 | masasikatano        |
|   10 | 10 |    10 | woundmille          |
|   11 | 15 |     0 | mongoosehalting     |
|   12 | 16 |     0 | gashbam             |
|   13 | 11 |   -10 | hollandaiseoncology |
|   14 | 12 |   -20 | clotpolestringed    |
|   15 | 13 |   -30 | listcampus          |
|   16 | 14 |  -100 | teammatemillwright  |
+------+----+-------+---------------------+
16 rows in set (0.00 sec)

うおお超便利

ついでに、Laravel EloquentでMySQLのユーザ定義変数を使う方法もあるみたいです。

■Having句

・HAVING句はWHERE句と異なりGROUP BY句によってグループ化が行われたデータに対して条件を指定してデータを絞り込む場合に使用します。

↓Havingを使用しない例

mysql> SELECT sex, AVG(score)
    -> FROM users
    -> GROUP BY sex ;
+--------+------------+
| sex    | AVG(score) |
+--------+------------+
| male   |    47.5000 |
| female |    66.8750 |
+--------+------------+
2 rows in set (0.00 sec)

↓Havingを使用して絞込を加えた例

mysql> SELECT sex, AVG(score)
    -> FROM users
    -> GROUP BY sex 
    -> HAVING AVG(score) > 50;
+--------+------------+
| sex    | AVG(score) |
+--------+------------+
| female |    66.8750 |
+--------+------------+
1 row in set (0.00 sec)

便利だ。

Cloud9でMysqlのスロークエリの確認

Cloud9環境でのMySqlのスロークエリの確認方法です。

以下ターミナルのBashからログファイルを作成しておきます。

masasikatano:~/workspace (master) $ touch slow_query.log
masasikatano:~/workspace (master) $ chmod 777 slow_query.log

MySqlからスロークエリ用の設定をします。

masasikatano:~/workspace (master) $ mysql -u root -pXXXXXXXXXX
mysql> set global slow_query_log=1;
mysql> set global long_query_time=1;
mysql> set global log_queries_not_using_indexes=1;
mysql> set global slow_query_log_file ='/home/ubuntu/workspace/slow_query.log';

これで、workspace上のslow_query.logからスローなクエリが確認できます。

Indexを追加するときと削除するときはこんなかんじ

 

# 追加
alter table users add index users_name_index (name);

# 削除
# ALTER TABLE users DROP INDEX users_name_index;