2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

SQL TipsAdvent Calendar 2021

Day 24

Tips: SQLで便利な構文: CASE文

Posted at

この記事では、SQLを書いているときによく使う便利な構文「CASE文」を紹介します。

ちなみに例で使うSQLは以下のようなテーブルにクエリを投げている前提で記述しています

テーブル名: users

id age gender point
1 10 0 40
2 20 1 50
3 30 0 60
4 40 1 70

条件ごとにラベルを付与したい時

CASE文を使うことで、各条件ごとにデータにラベルを付与することができます。

今回は例として、以下のようなラベルを付与したいと思います。

  • ageが20以下→young
  • ageが20より大きい→youth
SELECT CASE WHEN age <= 20 THEN 'young' ELSE 'youth' END AS segment, gender, point
FROM users

この結果は以下のようになります。

segment gender point
'young' 0 40
'young' 1 50
'youth' 0 60
'youth' 1 70

条件ごとにグループ化したい時

一つ目の例の応用として、データを定義したセグメントごとの人数などを出すことができます。

SELECT CASE WHEN age <= 20 THEN 'young' ELSE 'youth' END AS segment, COUNT(1) AS cnt
FROM users
GROUP CASE WHEN age <= 20 THEN 'young' ELSE 'youth' END 

この結果は以下のようになります。

segment cnt
'young' 2
'youth' 2

特定の条件の数を数え上げる

CASE文は集約関数と一緒に以下のように使うこともできます。
例として「ポイントが60以上のユーザーの数と割合」を出してみたいと思います

SELECT SUM(CASE WHEN point >= 60 THEN 1 ELSE 0 END) AS pass_count, SUM(CASE WHEN point >= 60 THEN 1 ELSE 0 END) * 1.0 / COUNT(1) AS pass_rate
FROM users

結果は以下のようになります。

pass_count pass_rate
2 0.5

最後に

SQLはこのようなリファレンスには載っていないようなテクニックが多くあります。
また別の記事で紹介していければと思います。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?