MySQLでの条件付きSUM,COUNT

公開日: : MySQL, 備忘録

以前つっかかったMySQLでの条件付きSUM,条件付きCOUNTについて備忘録。。。

通常、条件文はwhere文で記述することが多いけど、それだと1つのSQL文で柔軟に条件分岐が書けない場合がある。
それをselect文での条件分岐で解決しよう、というお話。

 

例として、以下の様なテーブル(sushi_map)について考える。

+--------+-------+-------+------+
| name   | price | extra | num  |
+--------+-------+-------+------+
| ebi    |   100 |     0 |   20 |
| ikura  |   120 |     0 |   12 |
| maguro |   140 |     0 |   30 |
| maguro |   170 |     1 |   40 |
| ikura  |   130 |     1 |   27 |
| ebi    |   180 |     1 |   33 |
+--------+-------+-------+------+

この時、例えば「extra=1のmaguroの合計金額(A)」、「extra=1のnameの数(B)」、「price > 150の合計金額(C)」をいっぺんに出したいとする。

それを実現するSQL文は以下で実現できる。

mysql> select
    -> sum(case when extra='1' and name='maguro' then price*num else 0 end)
    -> as A,
    -> sum(case when extra='1' then 1 else 0 end)
    -> as B,
    -> sum(case when price > 150 then price*num else 0 end)
    -> as C
    -> from sushi_map;

出力は、以下のようになる。

+------+------+-------+
| A    | B    | C     |
+------+------+-------+
| 6800 |    3 | 12740 |
+------+------+-------+

うん、あってますね、たぶん。

まあ味噌はSQL文での2,4,6行目。

sum(case when (条件文) then (設定したい値) else 0 end)

whereで条件を絞るとselectの全項目がそれの影響を受けちゃうんで都合がわるいこともあるのです。
SQL文複数書いてwhereで順々にやっていっても出せるわけだけれども、PHPのforeachなどで順々に値を取り出したいときなんかは一度にselectできる方が嬉しい事もよくあるわけです。

まだもっとイイやり方とかあるのかもしれませんが、取り敢えずはこれで欲しいものは取れるのでよしっと。

GoogleAdsense

関連記事

bash設定ファイルについてまとめてみた

仮想環境を組んだ時に、環境変数が所どころ未設定なことがあった。 環境変数の設定にはbashの設定フ

記事を読む

node_cookie

【Node.js】 Cookieの取り扱いまとめ

最近流行りのNode.jsですが、Cookieに関して、いくつかお決まりの取り扱い方があり、

記事を読む

genymotion_logo

genymotionのすすめ

Android開発においてしばしば挙がる不満として、エミュレータのもっさり感があります。 この

記事を読む

dordoidくん

【Android】難読化ツールProguard設定まとめ

Android開発環境の1つであるEclipseでは、標準でAndroidプロジェクトの難読化ツール

記事を読む

openssh

SSH CA認証まとめ

SSHでの接続を、CA認証でやってみる。 備忘録として残しておくの。。。 概要 Open-SSH

記事を読む

hydra

クラックツールHydraでベーシック認証を突破してみる

kali linuxにデフォルトでインストールされているツール「Hydra」を利用して、ベーシック認

記事を読む

android_kitkat

Android4.4(API19)KitKatでのGraphicalLayout,AdMob問題

Androidの新バージョンKitKatがリリースされてもう結構経つが、いまさら我が開発環境でも導入

記事を読む

android_secure

【Android】代表的な脆弱性まとめ ~ファイルアクセス権について~

近年、スマートフォンの普及に伴い、Android, iPhone, WindowsPhone? ユー

記事を読む

【Androidエラー】Conversion to Dalvik format failed with error 1

Androidにおいて、アプリケーションを作成し終え、いざパッケージをエクスポートっ!!というところ

記事を読む

Win7, 64bit環境でのcocos2d-x環境構築まとめ

さて、いままでJavaオンリーでゴリゴリとアプリリリースしてきたわけですが、ゲームを作るとなると、ど

記事を読む

GoogleAdsense

Message

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

GoogleAdsense

SSH CA HOST CERT IMG
SSH CA認証 (ホスト認証編)

ホスト認証 以前の投稿でSSH CA認証まとめとしてSSH C

openssh
SSH CA認証まとめ

SSHでの接続を、CA認証でやってみる。 備忘録として残しておくの。

node_cookie
【Node.js】 Cookieの取り扱いまとめ

最近流行りのNode.jsですが、Cookieに関して、いくつ

hydra
クラックツールHydraでベーシック認証を突破してみる

kali linuxにデフォルトでインストールされているツール「Hyd

john the ripper
パスワードクラックツール JOHN THE RIPPER 使い方まとめ

パスワードクラッキングツールである「JOHN THE RIPPER」の

→もっと見る

PAGE TOP ↑