- ベストアンサー
MySQLのSUM関数について
いつもお世話になっております。 宜しくお願い致します。 MySQLのSUM関数についてお聞きしたいのですが、データベースから特定の条件のカラムだけ合計をするという事はできないのでしょうか? たとえば・・・ hoge_table +------+-------+-------+ | user | data1 | data2 | +------+-------+-------+ | hoge | 1 | 0 | | hoge | 2 | 0 | | hoge | 1 | 1 | | hoge | 2 | 1 | +------+-------+-------+ というデータベースがあり、ここからdata1が1の場合の合計を集計するにはどうすれば良いのでしょうか? さらに、data1が2で、data2が0の場合といった複数の条件を指定して合計を出したいのですが、 方法が思いつきません。 select *, if(data1 = '1',sum('1'),'') as direct_dispatch_1 from hoge_table group by user とやってみたのですが、結果は4になってしまいました。 何か良い方法はございませんでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>data1が2で、data2が0の場合といった複数の条件を指定して合計を出したいのですが、 文脈からすると、合計ではなくカウントでしょうか? data1、data2は文字列型? MySQLは使ってないので、試していませんがこんな感じでどうでしょう? select *, sum(if(data1 = '1', 1, 0)) as d1, sum(if((data1 = '2') and (data2 = '0'), 1, 0)) as d2 from hoge_table group by user MySQLの文法は分からないのですが、やり方としては、 if文の中に条件を書いて、Trueなら1、Falseなら0に変換する。 それを sum() で合計を取れば、条件に合うレコードをカウントできます。
その他の回答 (2)
- asuncion
- ベストアンサー率33% (2127/6289)
> data1が1の場合の合計を集計する data1の合計値ですか?でしたら、 select sum(data1) from hoge_table where data1 = 1; でよいのではないでしょうか。 > data1が2で、data2が0の場合といった複数の条件を指定して合計を出したい 何の合計値でしょうか?
お礼
ありがとうございます。 すみません。説明ベタで申し訳ありません。 No3の方の回答で解決いたしました。 ご回答いただき、ありがとうございます!
- bin-chan
- ベストアンサー率33% (1403/4213)
MySQLにもwhereってありますよね? 合計とは「data2」の合計で良いですか? 確認してませんので外してたらごめんなさい。 【data1が1の場合のdata2の合計】 select *, sum(data2) as direct_dispatch_1 from hoge_table where data1 = '1' group by user 【data1が2で、data2が0の場合といった複数の条件】 (でもdata2の合計ってどうなのかな?) select *, sum(data2) as direct_dispatch_1 from hoge_table where data1 = '2' and data2 = '0' group by user
お礼
ありがとうございます。 すみません。説明ベタで申し訳ありません。 No3の方の回答で解決いたしました。 ご回答いただき、ありがとうございます!
お礼
ありがとうございます! まさしく理想的な内容です!! これで解決しました。本当に助かります!! それにしても、説明ベタな内容なのに汲み取って頂き、ドンピシャなご回答で本当にありがとうございますm(__)m