あおの記録52020.02.13|Java研修メモこんにちは、あおです\(^0^)/先日2/10に誕生日を迎え、26歳になりました!!しかし、祝っていただけて嬉しいという気持ちがだんだん消えかけてる今日この頃です...。早寝早起きしちゃうし、トイレが近いし、腰痛くるし...。)最近は近所にある大型スーパーによく行くのですが...。)財布・携帯・ジュースは私の三大生活必需品(笑)。ミルクティーが大好きです(*’ω’*)お菓子も食べるんですけど、買うほど食べたいって感じではないんですよね~。どちらかといえば、つまみ系は好きで昆布やチーズなどを買います!渋い食べ物が好きかもです...。)z-z味覚はきっとおこちゃまです...。甘いジュースが好きな割には、甘い食べ物はあまり食べないので...。自分でもよくわからない部分があったりします(;’∀’)ただ一人暮らししてからというとまずはお店のポイントカードを作って...毎日チラシを見て...週ごとに何を食べようか考えて...何をどのくらい買おうか考えて...賞味期限を気にして...家に何が残っているかを思い出して...仕事帰り、両手で大きな荷物を抱えて帰宅するという...自称主婦(笑)。)雑談はここまで!本日の研修内容を書いていきます。今日もSQLの課題を進めています。前回のブログでお伝えした通り、今日は「グループ化」について記載します。次回のブログでは「副問い合わせ」を記載したいと思います。・副問い合わせ◆所感グループ化...。グループ化をするとすごく便利に値を抽出することができます。とある会社の社員名簿テーブルがあるとします。支店コードや出身地、誕生日や血液型、部署コードなど様々な情報の値をもっています。そのなかで「血液型をグループ化して、何人いるか表示したい」なんてことが簡単にできます。他にも「支店コードが○○である、社員の数を部署コードごとに表示したい」なんてこともできます。15行目の”日付ごとの入出回数を取得”では、まず日付一覧の表示とその入出回数の合計をSUM関数を用いて計算しています。”入出回数”という名前をつけて表示しています。今回の場合、以下のような出力になります。1また、23行目の”社員ごとの入出回数(多い順)”では15行目とそんな変わらず、求めたい値がどういったもので、どの値を表示したいかが変わるだけで、15行目とほぼほぼ記載することは同じです。一度習ったことは復習し、応用できるようになりたいと思います。今回の場合、以下のような出力になります。渡辺また、33行目の”事由区分ごとの入出回数”ではCASE式にて名前をつけ、その名前ごとにグループ化をしています。事由区分は数字で表記されていて、パッと見では何の作業か判断しづらい状態です。そのため、事由区分名を表示するようにしています。今回の場合、以下のような出力になります。リリース作業また、58行目の”入室が2回以上の社員で社員名と入出回数”ではとても大事なことを学びました。それはHAVINGとWHEREの違いについてです。後に記述し、条件を付け加えて値を抽出するときにつかいます。そもそも条件抽出するときに使っていたのはお馴染みのWHEREです。「WHEREがあるなら全部WHEREを使えばいいのでは?」と思いました。WHEREとHAVINGにはとても大きな違いがありました。それは“いつ実行されるのか”です。BYより先に実行されます。BYより後に実行されます。要は条件を指定する際に「グループ化する前のデータ」を指定するのか、「グループ化した後のデータ」を指定するのかで使い分けています。WHEREは”集計関数(SUMやAVG、COUNTなど)を利用できない”がHAVINGは集計関数を利用できます。そのため、集計関数を利用するときはHAVINGを用います。今回COUNTでレコードの数(入出回数)を計算した後、条件として2回以上を指定しています。そのため、WHEREではなくHAVINGを使っています。今回の場合、以下のような出力になります。2◆一言グループ化自体はイメージしやすくそんなに難しくはないが、WHEREとHAVINGの使いわける理由は今後SQLを理解していくうえでかなり重要な部分であると思いました。いつ実行されるかによって結果が大きく変わったり、実行できなかったりするのでこの辺りもしっかり詰めていきたいと思います。次回は「副問い合わせ」について記載したいと思っております。