MySQLでの条件付きSUM,COUNT
以前つっかかった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】代表的な脆弱性まとめ ~ファイルアクセス権について~
近年、スマートフォンの普及に伴い、Android, iPhone, WindowsPhone? ユー
-
-
Win7, 64bit環境でのcocos2d-x環境構築まとめ
さて、いままでJavaオンリーでゴリゴリとアプリリリースしてきたわけですが、ゲームを作るとなると、ど
-
-
PHPのextensionが読み込まれない問題…
大したあれではないが、ちょっと詰まったのでメモ。。。 事のぼったんは久々にWordPressを
-
-
【Android】APKのデコンパイルまとめ
AndroidのプロジェクトをパッケージングしたAPKファイルをデコンパイル(Javaのソースコード
-
-
Android4.4(API19)KitKatでのGraphicalLayout,AdMob問題
Androidの新バージョンKitKatがリリースされてもう結構経つが、いまさら我が開発環境でも導入
-
-
クラックツールHydraでベーシック認証を突破してみる
kali linuxにデフォルトでインストールされているツール「Hydra」を利用して、ベーシック認
-
-
【Android】難読化ツールProguard設定まとめ
Android開発環境の1つであるEclipseでは、標準でAndroidプロジェクトの難読化ツール
-
-
パスワードクラックツール JOHN THE RIPPER 使い方まとめ
パスワードクラッキングツールである「JOHN THE RIPPER」の使い方を備忘録としてまとめてお
-
-
Vimプラグイン「NERDTree」設定・コマンド備忘録
Vimのプラグインである「NERDTree」について、設定・コマンドを備忘録としてまとめておきます。
-
-
【Androidエラー】Conversion to Dalvik format failed with error 1
Androidにおいて、アプリケーションを作成し終え、いざパッケージをエクスポートっ!!というところ
GoogleAdsense
- PREV
- 当ブログについて
- NEXT
- bash設定ファイルについてまとめてみた