[SQL] case when文

公開日: : DB, SQL , , , , ,

select結果を条件で振り分けるSQL

通常はjoinとかwhere句で振り分けたりしますが、
select結果に対して振り分けると処理が高速になったりします。

例)以下の履歴テーブルに対して、月毎に500円以上の明細をカウントする。

まずは普通にやってみます。
500円以上の明細にwhere句で絞ってから、group byでサマリしてcountをとっています。

select
  date_trunc('month', V1.date_time ) as month
  , count(*) as cnt
from
(
select
  *
from
  public.履歴テーブル T1
where
  T1.val >= 500
) V1
group by
  month

これをcase when文でやると以下のようになります。
case whenで「500円以上であれば1」という条件にしてsum関数で合計しています。
SQLのネストが1つ少なくなってシンプルな構成を実現できています。

select
  date_trunc('month', T1.date_time ) as month
  , sum(
     case when T1.val >= 500
       then 1
       else 0
     end
    ) as cnt
from
  public.履歴テーブル T1
group by
  month

SQL実行結果は両方とも以下のようになります。

ちなみに、date_truncはPostgreSQL独自ですので、MySQLとOracleでやる場合には以下になります。
●MySQL
 DATE_FORMAT(T1.date_time, '%Y-%m-01')
●Oracle
 trunc(T1.date_time, 'mm')

スポンサードリンク

関連記事

no image

[PostgreSQL][SQL] 日付関連

●interval tbl_Aから、tbl_Bの日付で7日前~現在に当てはまるレコードを抽出す

記事を読む

no image

[RDB][SQL] JOINについて

JOINについて説明します。 まず、以下の2つのテーブルがあります。 簡単なテーブルなので、

記事を読む

no image

[PostgreSQL][SQL] csvファイルのインポート

PostgreSQLでcsvファイルをインポートする際の方法を解説します。 例題として、以下の

記事を読む

no image

[SQLServer] 当日0時や月初0時の取得方法

当日0時や月初0時の取得方法です。 当日0時 DATEADD関数の2番目の引数にDATEDI

記事を読む

no image

[SQL] 割合を計算するときの定石(割られる数をCASTする)

なんとか率などの割合を計算するときのメモ。 割られるほうの数値を浮動小数点にCASTする 割られ

記事を読む

no image

[SQL] primary keyの追加・削除

テーブル作成後にprimary keyを付与する方法です。 ALTER TABLE テーブ

記事を読む

no image

[SQLServer] SQLServerでSplitを実装!

SQLServerでSplitを実装してみます。 最新のSQLServerには組み込み関数があ

記事を読む

no image

[SQL][集計関数] 行数をカウントするcount関数の解説

count関数について説明します。 count関数は、グループ化した単位での件数をカウントしま

記事を読む

no image

[PostgreSQL] よく使う基本コマンド

PostgreSQLでpsqlのコマンド入力をする場合の一般的SQL以外のコマンドを列挙します。

記事を読む

no image

[PostgreSQL] csvでSQL結果を出力する方法(psqlコマンド)

SQLエディタ、接続ツールなどを使うと簡単に行える CSVファイルでの出力 について、コ

記事を読む

スポンサードリンク

Message

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

スポンサードリンク

no image
[python] 文字列結合

pythonでの文字列結合 サンプル

no image
[python] 配列の扱い方

pythonでの配列の扱い方 python 配列の作成

no image
[python] ファイルの読み込み

pythonでのファイルの読み込み方法 基本サンプル

no image
[PHP] 文字列の置換(str_replace)

文字列中の特定文字列を置換する方法 str_replace サ

no image
[PHP] テキストファイルへの書き込み

PHPでテキストファイルに書き込みを行う方法 上書き

→もっと見る

  • 2017年7月
    « 6月    
     12
    3456789
    10111213141516
    17181920212223
    24252627282930
    31  
  • 2017年7月
    « 6月    
     12
    3456789
    10111213141516
    17181920212223
    24252627282930
    31  
PAGE TOP ↑