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
関連記事
-
-
bash設定ファイルについてまとめてみた
仮想環境を組んだ時に、環境変数が所どころ未設定なことがあった。 環境変数の設定にはbashの設定フ
-
-
【Node.js】 Cookieの取り扱いまとめ
最近流行りのNode.jsですが、Cookieに関して、いくつかお決まりの取り扱い方があり、
-
-
genymotionのすすめ
Android開発においてしばしば挙がる不満として、エミュレータのもっさり感があります。 この
-
-
【Android】難読化ツールProguard設定まとめ
Android開発環境の1つであるEclipseでは、標準でAndroidプロジェクトの難読化ツール
-
-
SSH CA認証まとめ
SSHでの接続を、CA認証でやってみる。 備忘録として残しておくの。。。 概要 Open-SSH
-
-
クラックツールHydraでベーシック認証を突破してみる
kali linuxにデフォルトでインストールされているツール「Hydra」を利用して、ベーシック認
-
-
Android4.4(API19)KitKatでのGraphicalLayout,AdMob問題
Androidの新バージョンKitKatがリリースされてもう結構経つが、いまさら我が開発環境でも導入
-
-
【Android】代表的な脆弱性まとめ ~ファイルアクセス権について~
近年、スマートフォンの普及に伴い、Android, iPhone, WindowsPhone? ユー
-
-
【Androidエラー】Conversion to Dalvik format failed with error 1
Androidにおいて、アプリケーションを作成し終え、いざパッケージをエクスポートっ!!というところ
-
-
Win7, 64bit環境でのcocos2d-x環境構築まとめ
さて、いままでJavaオンリーでゴリゴリとアプリリリースしてきたわけですが、ゲームを作るとなると、ど
GoogleAdsense
- PREV
- 当ブログについて
- NEXT
- bash設定ファイルについてまとめてみた