skillup

技術ブログ

Database

CASE+HAVING句

投稿日:

今回はCASEとHAVINGを組み合わせて、そこそこの難問を解いていきます。

まず下記のようなテーブル(testresults)があるとします。

student | class | sex | score
————–+——-+—–+——-
001 | A | 男 | 100
002 | A | 女 | 100
003 | A | 女 | 49
004 | A | 男 | 30
005 | B | 女 | 100
006 | B | 男 | 92
007 | B | 男 | 80
008 | B | 男 | 80
009 | B | 女 | 10
010 | C | 男 | 92
011 | C | 男 | 80
012 | C | 女 | 21
013 | D | 女 | 100
014 | D | 女 | 0
015 | D | 女 | 0

下記3題をCASEフラグとHAVINGで求めていきます。

コツとしては下記のようなことがあげられます。

  • 特定条件のの生徒をCASEで条件分岐させてフラグを立てる
  • さらにそれのSUMをとり、全体数と比較し、HAVINGで合致しているものを出力
  • SQLは割り算が整数になってしまうなどに注意。

なお下記SQLではSELECTの列で計算式をかいていますが、ここは書かなくてもOKです。(私が途中計算するうえでの確かめのために出してます。)

問題1
クラスの75%以上が80点以上のクラスを求めよ

答えはクラスBですが、

問題2
50点以上を取った生徒のうち、男子の数が女子の数よりも多いクラスを求めよ

クラスBとクラスCが該当。

第3問

女子の平均点が、男子の平均点より高いクラスを選択せよ。

-Database
-

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

MySQL小ネタ テーブル単位のリストア・SQLの小ネタ(バックスラッシュの検索)

MySQLのちょい小ネタ。 Contents1 テーブル単位でバックアップ&リストア2 バックスラッシュの入ったSQLについて テーブル単位でバックアップ&リストア 1 通常のdump(データベース単 …

no image

DBの基礎 テーブルとは

CSSを学習したあとはデータベースの学習などを。 参考図書:「達人に学ぶDB設計指南書」基本的にはこれを読んでいきます。が、現状よくわからないところは飛ばしていきます・・・ Contents1 テーブ …

no image

データベース設計のアンチパターン 複数表結合,大作SQL,Blob型の乱用

データベースのアンチパターンに関して。 以前下記ブログでも書いたんですが設計のスキルに関してもう少し身に着ける必要があるとおもい、チェックします。 論理設計のグレーノウハウ サロゲートキー 論理設計の …

no image

NOT EXISTSの利用

引き続きNOT EXISTSの利用です。 思った以上に使えますね・・・がムズイ。 今回は下記のようなテーブル(seats)があるとします。 ケースとしては新幹線の座席番号で空は席が空いている状態、占は …

no image

浮動小数点に関して

金額計算なんかでfloatを使うと誤差が出るっていうのは基礎的な話ではありますが、背景知識を含めて理解しておこうと思ったのでメモります。 Contents1 float,doubleでの誤差2 金額の …

アーカイブ