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

関連記事

android_secure

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

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

記事を読む

genymotion_logo

genymotionのすすめ

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

記事を読む

android_kitkat

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

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

記事を読む

dordoidくん

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

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

記事を読む

openssh

SSH CA認証まとめ

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

記事を読む

PHPのextensionが読み込まれない問題…

大したあれではないが、ちょっと詰まったのでメモ。。。 事のぼったんは久々にWordPressを

記事を読む

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

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

記事を読む

john the ripper

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

パスワードクラッキングツールである「JOHN THE RIPPER」の使い方を備忘録としてまとめてお

記事を読む

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

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

記事を読む

nerdtree

Vimプラグイン「NERDTree」設定・コマンド備忘録

Vimのプラグインである「NERDTree」について、設定・コマンドを備忘録としてまとめておきます。

記事を読む

GoogleAdsense

Message

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

GoogleAdsense

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」の

宇部空港
久々の帰省・・・

宇部空港にて[/caption] たまには普通の日記を。。。

→もっと見る

PAGE TOP ↑