(MS)SQLの勉強会(SQLWorld★大阪#18)のハンズオンに参加しました。

前回全く解けなかったリベンジを兼ねて、美人なさおさんに会いにおださん主催のSQLServer勉強会(ハンズオン)に参加しました。

http://sqlworld.org/event/20131003/

前回の土曜日にMSさんであった時は体調不良で参加できなかった会社の後輩を含め、3人で参加することになりました。うちの会社は開発中心のSIerで東京と大阪に拠点があるのですが、ちょっと大阪は常駐型の小規模案件が多く、テクノロジーの幅が広がらないことを懸念して、その解消にと。
ただ、マッシュアッププログラミングコンテスト MA9 のアイデアソンも同日〜22:30まであるみたいなので、賞金に目がくらんでいる自分は、(勉強会は出るとしても)アフターは後輩の自主性に任せてそっちに流れるか、ちょっと悩みどころ。。。

仕事終わって多少間があるので、後輩2人とブックファースト情報処理試験(主にDBスペシャリスト)の学習本をみつくろう。1人は情報処理試験を受けたことない(経済学部出身)ので、高橋麻奈さんの本とかをおススメしておく。高橋さんも経済学部(東大だけど)みたいだし、視点がマッチするかも。

更に時間があるのと、小腹空いて戦闘力なくなりかけなので、3階のカフェコーナーでワッフルとコーヒーで充電しつつだべる。
とかウダウダしてると、集合場所への到着がギリギリになってしまう。前回みたくさおさんギリギリに来てへんかな?と期待しつつ小走りで行ったけど、我々3人が最後だったようですm(_ _)m

まずは会場の部屋に着いて、おださんから勉強会の趣旨説明とか無線のセッティングとかの後、各自の自己紹介に入る。後輩2人から「先輩に連れてきてもらいました」とか言われ、ちょっ、、やめれ!照れるやん..//

(俺はあなた達の知らない場所を見せて、背中を押しているだけなんだけど)

というわけで?今回のハンズオンもおださんがAzule上に作ってはるサイトで始まりー。タブが増えて前回の問題に簡単に飛べるようになるなど、着実に進化しているこのサイト。すばらしい!

問題提供は、前回のうどんで「仕事で扱ってるミドルウェアがゆうこと聞いてくれへんのですよ。どうにかしてくださいー(> <)」とぼやいてはったさおさん。ちょっとトリッキーな問題になるようです。ただ前回丸腰で飛び込んで歯が立たなかったので、懐に忍ばせたSQLポケットリファレンス第3版、昔穴が開きそうなくらい読み込んでいた初版とくらべ、全然使いこんでないこいつを活躍させる日が来たようだな。。(以下、登山日記風味で行きたいと思います)

問1は、行列を入れ替える問題。独力で進もうとするがすんなり挫折。そうですよこのためのポケリですよ。ということで調べる。とりあえず自分の中で最低な目標ラインを設定し、それに向かってひたすら書く。行列入れ替えにはCASE〜WHEN〜ELSE〜ENDとかいう、見た事ある気もするけど一生自分で使わないと思っていた書き方をするのが常套のようだ。ただ何も結果が返らないので、隣にいてるMicrosoft MVPのおださんに聞いてみる。どうやら別名をつけないとアカンようです。(お恥ずかしい)

そんなこんなで自分の最低目標をなんとか出す事はできたのだが、本当にこの先の登山道が行き止まりになってないか、ふと不安になったので、百戦錬磨のおださんに聞いたところ、九合目まで来ているとのこと。勇気をもらったので、なんとか最後頂上まで上ろうとするが、group by?order by?とかまごついている間に脱落orz。そうだ集計関数のmaxとかminとか使えばいいんだ!

気を取り直して2問目。問1の問題の結果を、デリミタで連結する問題。とりあえず文字列連結は+なのか?VB的に&なのか?とかのレベルから試行錯誤してみる。とりあえず大ヒントのサブクエリー使用は、先行者の足跡を横目でチラ見して軌道修正する。ただ、またまだ結果が返らないので、おださんにヘルプを申し込む。nullと他の文字を連結するとnullになるそうで、null判定処理をガシガシと入れる。とりあえず余分なデリミタはあるけど、連結はできた!

その後の行末のデリミタ除去は、もはや神に見えるおださんがゴリゴリ書くしかないんちゃいますか?とおっしゃった所、フェンリルのいせえびさんが、空白デリミタを入れて、Trimし、デリミタ文字を入れ替えるというエレガントな解を発見!さすがフェンリルの方、柔軟な発想です。すばらしい!

なんとか自分もうまい方法なり、ネタ的な別解なりを見つけたいと考えて粘るものの、SQLServer固有の問題(TRIM文字を指定した、要するにスペース以外のTRIMできない)につまづき、結局タイムアウト(> <);

しかし文字列使用のTRIMの書き方、左右だけ除去する時はLTRIM(文字, 除去文字)、RTRIM(文字, 除去文字)という書き方なのに、両方除去する時はTRIM(文字 FROM 除去文字)と書くらしい。この言語仕様の統一感のなさはどうやねん!実装先行なので仕方ない部分あるんだろうけど。。

ちなみに後者はSQL標準なのにSQLServerだけ対応してない書き方みたい。とほほ。。

皆さんの解き方を紹介するコーナーで、いせえびさんの他にも、行頭にデリミタをつけて2文字目から取得するという、発想の転換的な解もあってすばらしい。

ここでちょっとトイレ休憩。普段はFirebird(!)とかPosgreSQLとかを使ってますという方と、道すがらお話しする。今回は色々なDBMS使いが来てはるようだ。

問3は前の問題粘りすぎたためか、時間が押して解説のみ、最後の問4に取りかかる。別のテーブルを集計し、小計、合計の集計行を追加するようだ。とりあえず集計行を足す前の結果をはじきだす。ただどう進めばよいのか分からないので、ポケリの集計関数を適当に使って書いてみる・・・へ・・・できてもた。

なんだか、頂上も見えないまま霧だらけの道をなんとか進んでいたら、霧が晴れてそこが頂上だった感じ。名シェルパのおださんに色々とアドバイスもらって、なんとか先輩としての威厳?は保たれました。

実際に使った関数はROLLUPというSQL標準の関数なのですが、ちょっと昔のPostgreSQLには実装されていなかったりするなど、標準規格と各DBMSの実装状況の違いは悩ましい。。Firebirdも実装が遅れていて、まだ使えない?模様。

とりあえず2次会はうどん屋のうどんが切れていたので、少し歩いたサイゼリアで歓談。退職した元同僚と一緒に仕事してる人と知り合うなど、世間は狭いなー。

リーズナブルなイタリア料理と、1杯100円!のワインを堪能し、作ったばかりの個人名刺を配りまくる。Rubyの父Matzの高校の後輩であることを記載し忘れたので、そのへんは口頭で補足しておく(ええ、けしてドヤリングしてないはず)。

あとは普段は事業開発をされている方が興味を持って今回初参加されていて、ちょっと別の世界のお話とかも聞けて刺激になりました。

前回は全然知らなかったのだけど、さおさんやいせえびさんは色々な勉強会を主催されているようで、今後も勉強会に参加したての後輩を送り込もうかな?とか考えてみる。

と、いうわけで、つい1月ちょっと前までは、社内の勉強会立ち上げるのも自信ないなーと思っていたのだが、こうしたコミュニティの力を借りつつ、できる所からコツコツやって行こうという勇気をもらった一日でした。

主催のおださん、また参加された皆様どうもありがとうございました!