• ベストアンサー

SUMの使い方

こんにちは。 SUMの使い方で教えて欲しいことがあるのです。 SELECT句の中でSUMの入れ子は使えないのでしょうか。 SUM(IF(SUM(金額) >= 5000,金額,0)) という感じで SUM(金額)が5000以上の条件で真:SUM(金額)偽:0 という結果を求めたいのですが、動かないのでこれじゃダメなんだなと 思い色々試してはみたのですが、欲しい結果が出せません。 何かよい方法を知っている方がいましたら、教えて下さい… MySQL クライアントのバージョン: 5.0.45 です

  • MySQL
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • nora1962
  • ベストアンサー率60% (431/717)
回答No.1

case when sum(金額) >=5000 thne sum(金額) else 0 end でどうでしょう。

koke29
質問者

お礼

nora1962さん 回答ありがとうございます 提示して頂いたのと同様の文を SELECT SUM(case when sum(金額) >=5000 then sum(金額) else 0 end) という形で入れてみても反応なしだったのです… 結局、入れ子は難しいなと判断して、PHPのIF文で分けることにしました (DBのデータには直接関わらない部分で使いたかったので) DB 難しいですね。面白いけど。

関連するQ&A

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

    • ベストアンサー
    • MySQL
  • 複数のグループ化でのSUM関数について

    お世話になります。宜しくお願い致します。 MySQL4.1.15を使っております。 下記のようなテーブルがあるとします。 hoge_table | id1 | id2 | total | | 1 | 10 | 100 | | 1 | 10 | 100 | | 1 | 10 | 100 | | 2 | 20 | 200 | | 2 | 20 | 200 | | 3 | 20 | 300 | | 4 | 20 | 400 | | 4 | 20 | 400 | | 4 | 20 | 400 | | 4 | 20 | 400 | | 5 | 20 | 500 | | 5 | 20 | 500 | | 6 | 30 | 600 | | 7 | 30 | 700 | | 7 | 30 | 700 | | 7 | 30 | 700 | | 7 | 30 | 700 | | 8 | 30 | 800 | | 9 | 30 | 900 | | 9 | 30 | 900 | | 9 | 30 | 900 | | 9 | 30 | 900 | | 9 | 30 | 900 | このテーブルに対して、下記のような条件でTOTALを出したいのです。 条件: id2でグループ化させた上、同じid1のtotalから重複を削除した合計 id2をグループ化させると、10、20、30の3レコードにまとまり、sum関数を使ってtotalの合計を出すと SQL = select id1,id2,sum(total) as total from hoge_table | id1 | id2 | total | | 1 | 10 | 300 | | 5 | 20 | 3300 | | 9 | 30 | 8700 | という結果になるかと思います。 ここで、sum関数で合計させるtotalを、さらにid1で重複を削除したtotalのみを集計したいのです。 つまり、 | id1 | id2 | total | | 1 | 10 | 100 | | 5 | 20 | 1400 | | 9 | 30 | 3000 | という結果を出したいのですが、どうしてもこの結果が得られません。 サブクエリでid1をグループ化させたtotalをsum関数で集計してもやはりだめでした。 何か良い方法は無いのでしょうか? 何卒、ご教授の程、宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • SUMとJOINのことで質問です

    こんにちは 以下のようなテーブルがあるとして これらをLEFT JOINで全て繋いで、T2以降のSUM(金額)をそれぞれ 取りたいのですが、T2 T3 T4 T5 T6 の中にデータを入れるごとに 2倍・4倍・8倍・16倍とSUMの中の値がドンドン増えていってしまう のですが、何が原因なのでしょうか? 増えていく値が2のn乗なのはわかるのですが、どこが引っかかって こんなことになるのかサッパリわかりません。 ● T1 名前|A_id|B_id|C_id|D_id|E_id| AAAA|1111|2222|3333|4444|5555| ● T2 id|S_id|金額 01|1111|1000 →SUM=1000のはずが、16000 ● T3 id|S_id|金額 01|2222|2000 →SUM=2000のはずが、32000 ● T4 id|S_id|金額 01|3333|3000 →SUM=3000のはずが、48000 ● T5 id|S_id|金額 01|4444|4000 →SUM=4000のはずが、64000 ● T6 id|S_id|金額 01|5555|5000 →SUM=5000のはずが、80000 原因と宜しければ修正方法も教えて頂けるとありがたいです。 MySQL クライアントのバージョン: 5.0.45です 宜しくお願いします。。。

  • エクセル関数 入れ子の作り方 コピー可能?

    エクセル関数の入れ子の作り方で教えてください。 IF関数が3つ入れ子になる状態を作りたいのですが、 一つ一つのIF関数の式が長いので、動作を確認するために、 とりあえず3つのセル(A1,A2,A3)に一つずつ作ってみました。 この時A1,A2の偽の値には仮に”偽”と入れて作ってあります。 それぞれのIF関数は正しく出来ていたので、A3の式をA2の偽の値へ、 A2の式をA1の偽の値へ、と入れ子にしたいです。 コピーして貼り付けたいのですが上手くいきません。 ちなみに数式は A1 =IF(AND(K31<>TRUE,K33<>TRUE,K35<>TRUE),"","偽") A2 =IF(AND(K35=TRUE,INDEX(H19:H24,K18)="-"),J37,"偽") A3 =SUM(IF(K31=TRUE,INDEX($F$19:$H$24,K18,1),0),IF(K33=TRUE,INDEX($F$19:$H$24,K18,2),0),IF(K35=TRUE,INDEX($F$19:$H$24,K18,3),0)) です。一つのセルですべての条件を満たす必要があり、他のセルは利用できないので、 なんとしても入れ子にしなくてはなりません。 すべてを打ち込みしないとダメでしょうか? 検索してみましたがヒット出来ませんでした。 どうかよろしくお願いします。

  • IF関数で出した数値をSUM関数で使う

    2010エクセルでの関数について質問があります。 文章での説明でどこまで詳しくご説明できるか不安ですが お付き合い願います。 IF関数で =IF(A13>=25,"10","")と計算し、 セル内に、「10」と表示しています。 さらに、 上記、関数から表示した「10」を SUM関数を使い、 =SUM(A13,B13)と計算しました。 しかし、 IF関数で出した「10」が認識されず足し算されません。 「真の場合」や「偽の場合」で出された数値は 数値として認識されていないのでしょうか? 例えば・・・ B13のセルの数値が「200」であれば、SUM関数を入力しても 「10」が足されることなく、「200」のままで表示されるということです。 どのような方法ならば、足し算されるのでしょうか。 または、関数の使い方が間違っているのでしょうか。 説明が分かりにくく申し訳ありませんが、 宜しくお願い致します。

  • エクセルでの疑問(""と" "の違い、またセル+セルとsum関数の違い)

    エクセルにおいて、スペースを挿まない""と、スペースを挿む" "の違いを教えてください。 if関数で条件が真の場合に空欄""(←スペース無し)を返して、その空欄のセルと別のセル(数字が入っている、例えば1)を加算(セル+セルであり、sumは使わない)するように計算式を組んでも、空欄のセル(ifのセル)を0と認識してくれず、その結果#VALUE!と出てしまいます。 一方、""にスペースを挿んで" "とすると、数値と認識して、加算結果は1と表示されます。 因みに、sum関数で問題のセル(ifのセル)と別のセル(例えば1)を計算すると、1という結果が返ってきます。 スペース無し("")とスペースあり(" ")の違いって一体何なのでしょうか? また、なぜセル+セルでは#VALUE!になり、sumでは#VALUE!にならないのでしょうか? 宜しくお願いします。

  • Access SUMの結果が何もない時0を返す

    親フォームで条件を入れて、その結果がサブフォームに表示されます。 例えば4月という条件を入れると 日付 金額 4/1 \1,000 4/2 \2,000 合計 \3,000 ("合計"というテキストボックスを配置して、コントロールソースに=SUM([金額])を入れています) といった単純なものです。 その時、例えば5月になにもないとすると、そのサブフォームでSUMを計算した時、結果が空白になるため、そこに0を返す方法を教えてください。

  • MSExcel2003で条件分岐の方法

    今まで、条件AまたはBである時は真・それ以外は偽を返す式を作るとき =if(A1="A","真",if(A1="B","真","偽")) という式を作ってきました。これをor記号を使って =if(A="A"or"B","真","偽") というように作り替えたいのですが,うまくいきません。 今は二つの条件に合わない場合は偽としていますが、これが 5つくらいになってくるとこの方法補煩雑で間違いが多くなり使えないのですが、 どうすれば上手な条件分岐をすることができますか?

  • if文における代数の設定方法

    if文を使った条件分岐をさせているんですが、条件の共通部分が多いため、代数か何かを設定してまとめられないかなと考えています。 何度も同じ条件文を書いていると、カッコが多すぎてどこがどこにかかっているのか全くわからなくなります。 代数でなくてもよいのですが、とにかく上手くまとめたいと思っています。 今作っているのは 条件C1=Note_on_c"かつMOD(I1,1)=0) 真なら(MIN(124,F1+6) 偽なら  条件C1=Note_on_c"かつMOD(I1,1)=0.5)  真なら(MAX(60,F1-5))  偽なら   条件C1=Note_on_c"かつMOD(I1,1)=0.25)    真なら(MIN(120,F1+6)    偽なら    条件C1=Note_on_c"かつMOD(I1,1)=0.75)     真なら(MAX(90,F1-5))     偽ならF1 というもので以下のように書いてみたのですが(まだ途中です) =IF((C1=" Note_on_c")*AND(MOD(I1,1)=0),(MIN(124,F1+6)),IF((C1=" Note_on_c")*AND(MOD(I1,1)=0.25),(MAX(60,F1-5)),F1)) とこのように、IF((C1=" Note_on_c")までは全て一緒なのですが、条件文に共通部分があっても入れ子にするしかないのでしょうか。 もっとスマートな方法があったら教えて下さいませ。

  • プロシージャーで(SELECT句とSUM関数)でデータがない状態の時

    プロシージャーで(SELECT句とSUM関数)でデータがない状態の時 例 テーブル名:表1 *************** * 個数* 連番 * *************** *  10 * 5  * *************** *  10 * 6  * *************** このようなテーブルの時で以下の処理をしたとき「何かをする;」を実行したいのですが実行できませんどうすればいいでしょうか? 変数が何もない状態なのでNULLで判定しようと思うのですが、うまくいきませんよろしくお願いいたします。 ************************************************** 変数 A NUMBER型を用意する SELECT SUM(個数) INTO A FROM 表1 WHERE 連番 < 4 IF A = NULL THEN 何かをする; END IF; **************************************************