[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

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

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

記事を読む

no image

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

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

記事を読む

no image

[PostgreSQL][SQL] 文字列関連

PostgreSQLで文字列の処理をしたい場合のTipsをご紹介します。 ①文字列連結

記事を読む

no image

[PostgreSQL][SQL] 日付関連

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

記事を読む

no image

[SQL] primary keyの追加・削除

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

記事を読む

no image

[RDB][SQL] JOINについて

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

記事を読む

no image

[SQLServer] SQLServerでSplitを実装!

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

記事を読む

no image

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

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

記事を読む

no image

[SQL] 副問い合わせのin句に指定できるワードの数について

副問い合わせのin句に指定できるワードの数について ●Oracle 1000個が上限のようで

記事を読む

no image

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

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

記事を読む

スポンサードリンク

Message

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

スポンサードリンク

no image
CentOSにdockerをインストールしてみた

前置き dockerをcentos7にインストールしてみました

no image
awkでのgsubを使った文字列置換(正規表現)

まえおき bashなどのシェルスクリプトで、lsした結果とかを

no image
bashで並列処理する方法(xargs)

並列処理とは 通常、意識せずにプログラムを書くと、大体の場合は

no image
AWS Redshiftの使用ストレージ容量をクエリで調べる方法

用途 AWS Redshfitのコンソールを見れば、使用中のス

no image
pythonでstorage transfer serviceを使ってみた。

準備 pythonのインストールとかする。 このあたり。

→もっと見る

  • 2025年4月
     123456
    78910111213
    14151617181920
    21222324252627
    282930  
  • 2025年4月
     123456
    78910111213
    14151617181920
    21222324252627
    282930  
PAGE TOP ↑