こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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になってしまいました。
何か良い方法はございませんでしょうか?

投稿日時 - 2007-10-30 20:52:21

QNo.3475500

すぐに回答ほしいです

質問者が選んだベストアンサー

>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() で合計を取れば、条件に合うレコードをカウントできます。

投稿日時 - 2007-10-30 21:43:02

お礼

ありがとうございます!
まさしく理想的な内容です!!
これで解決しました。本当に助かります!!
それにしても、説明ベタな内容なのに汲み取って頂き、ドンピシャなご回答で本当にありがとうございますm(__)m

投稿日時 - 2007-10-31 00:29:20

ANo.3

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

> data1が1の場合の合計を集計する

data1の合計値ですか?でしたら、
select sum(data1) from hoge_table where data1 = 1;
でよいのではないでしょうか。

> data1が2で、data2が0の場合といった複数の条件を指定して合計を出したい

何の合計値でしょうか?

投稿日時 - 2007-10-30 21:40:16

お礼

ありがとうございます。
すみません。説明ベタで申し訳ありません。
No3の方の回答で解決いたしました。
ご回答いただき、ありがとうございます!

投稿日時 - 2007-10-31 00:30:54

ANo.1

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

投稿日時 - 2007-10-30 21:03:40

お礼

ありがとうございます。
すみません。説明ベタで申し訳ありません。
No3の方の回答で解決いたしました。
ご回答いただき、ありがとうございます!

投稿日時 - 2007-10-31 00:30:20

あなたにオススメの質問