【MySQL入門】CASE式を使いこなす!条件による評価も非定形な集計も

皆さんMySQL使っていますか?この記事では入門記事の中でも少し応用的な内容を扱います。

今回のテーマはCASE式。使いこなせるようになると、様々な場面で複雑な処理を任せることのできる便利な式です。さっそくいってみましょう!

そもそもCASE式とは

まずは、そもそもCASE式とはなんなのかをみていきます。CASE式の書式は次のようになります。

CASE WHEN 条件1 THEN 表示1
WHEN 条件2 THEN 表示2
……
ELSE 表示その他
END

CASEは条件に合致した時、指定した表示を返します。条件1に合致したら表示1を、条件2に合致したら表示2を、という具合ですね。すべての条件に当てはまらない場合は、ELSEで指定した表示その他が使われます。

ELSEの部分は省略可能ですが、エラーの原因になるため、設定しておくべきです。では、実際にテーブルを使って操作を体験してみましょう。そのためのテーブルをまずは準備します。下のクエリを実行してテーブルを準備しておいてください。

実行結果

このようなテーブルができていればまずはオッケーです。

CASEの簡単な例:成績を優良可不可にわける

この章では前章で作ったテーブルを使い、成績ごとに優良可不可をつけたテーブルを作っていきます。

ゴールのイメージはこのような感じです。

まずは既存の知識で作れる部分を作ってしまいましょう。このような表を出したい場合、SELECT文を使えばscoreから左の部分は簡単に作ることが可能ですね。

実行結果

あとは、先程紹介したCASE式を組み込んでいけばゴールを実現できそうです。評価について、まずは基準を決めておきましょう。今回は次の基準で優良可不可を判定します。

  • 優:80点以上
  • 良:70点以上80点未満
  • 可:60点以上70点未満
  • 不可:60点未満
  • 未評価:それ以外の値

では、この条件を式に起こしてみましょう。優は80点以上なので、式にすると次のようになります。

score >= 80

不可も同じように

60 > score

このことから良は80 > score >= 70 とやりたくなってしまいますが、MySQLでは比較演算子は1つずつ処理しなければいけないので、次のようになります。

80 > score AND score >= 70

可も同じように考えて

70 > score AND score >= 60

これらを先程のCASE式の書式に当てはめると次のようになります。

あとは表示部分を優良可不可に書き換えて、エイリアスをつけてあげればCASE式は完成です。

では、CASE式を組み込んだSELECT文全体をみてみましょう。

これを実行した結果がこちらになります。

当初のゴールを達成することができましたね。

CASEの応用例:男女の人数を部署ごとにカウント

今度は少し応用として、部署ごとに男女が何人いるかをカウントするクエリを考えてみましょう。完成イメージは次のとおりです。

これを実現するにはSUM関数GROUP BYの知識が必要になります。

SUM関数とは

SUM関数はExcelなどでもおなじみの和を取る関数です。書式は次のようになります。

  • SUM(カラム名や式)

簡単な例として、参加者のテストの合計点を計算してみましょう。クエリは次のようになります。

実行結果

上の書式で説明したように、SUM関数は引数にカラム名だけでなく、式も設定することができます。そこで、SUM関数とCASE式を組み合わせてみましょう。genderが1の社員に1、それ以外を0とするようなCASE式を作ってみます。

実行結果

これをSUM関数で合計することで、テーブル内の男性社員の数を調べることができます。

実行結果

同様に考えて、女性社員、その他の社員の人数も調べることができます。

クエリ

部署をまたがないで、全体で男性女性その他の集計を取ることができました。

GROUP BYとは

GROUP BYはカラム名を基準にテーブルをグループ化する事ができます。GROUP BYは次のような書式を取ります。

  • SELECT*FROM テーブル名 GROUP BY カラム名;

たとえば部門ごとにテストの合計点を計算するには次の式を使います。

実行結果

男女の人数を部署ごとにカウントするクエリ

さて、これまでの知識を組み合わせてみましょう。クエリは次のようになります。

想定通り、部門ごとの男女その他の社員数が得られましたね!

まとめ

いかがでしたか?今回はCASE式について、基礎的な部分から簡単な例、応用的な例を紹介してきました。データベース業界の巨人、J.セルコの言葉によれば、CASE式は「SQL-92(1992年に策定されたSQLの規格) で追加された中で最も有用かもしれない」というくらい有用な道具です。

使いこなせればSQLでできることがグッと広がるので、ぜひいろいろな例に挑戦して、CASE式の運用能力を高めていってください。この記事が皆様のMySQL学習の一助となれば幸いです。

LINEで送る
Pocket

最短でエンジニアを目指すなら侍エンジニア塾

cta_under_bnr

侍エンジニア塾は業界で初めてマンツーマンレッスンを始めたプログラミングスクールです。これまでの指導実績は16,000名を超え、未経験から数多くのエンジニアを輩出しています。

あなたの目的に合わせてカリキュラムを作成し、現役エンジニア講師が専属であなたの学習をサポートするため効率よく学習を進めることができますよ。

無理な勧誘などは一切ありません。まずは無料体験レッスンを受講ください。

無料体験レッスンの詳細はこちら

書いた人

平山 晃

平山 晃

フリーのエンジニア・ライター。
プログラミング、ライティング、マーケティングなど、あらゆる手段を駆使して、
ハッピーなフルリモートワーカーを目指し中。

最近興味がある分野は深層強化学習。
積みゲー、積ん読がどんどん増加しているのがここ数年の悩み。
実は侍エンジニア塾の卒業生だったりします。

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説