収入と支出の金額計算方法

このQ&Aのポイント
  • 金額の計算方法について説明します。特定のテーブルから収入と支出の5月分の合計を求める方法について解説します。
  • テーブルから特定の期間の収入と支出を集計する方法について説明します。
  • 収入と支出の差額を求める方法について説明します。select文を使用して、収入から支出を引いた値を計算することができます。
回答を見る
  • ベストアンサー

金額の計算方法

以下のようなテーブルがあります。 hiduke | syuusi | tekiyou | kingaku | bikou 2007-5-8 | 収入 | 給料 | 48000 | バイト代 (以下数十件続く) このテーブルから、次のようにして収入と支出の5月分の合計を求めました。 select syuusi,sum(kingaku) from suitoh_table where hiduke like '2007-5-%' group by syuusi; syuusi | sum 収入 | 61000 支出 | 15080 するとこのように表示されるのですが、ここからさらに「収入-支出」と計算するにはどうすればいいのでしょうか? 最初のselect文の段階で、収入-支出の計算までさせたいのですが・・・。

  • rusya
  • お礼率56% (167/295)

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

  • ベストアンサー
回答No.5

どうしても縦(=別の行として)に表示したいですか? 横に並べる形でもいいなら、簡単なSQLで実現可能と思います。 select sum(case syuusi when '収入' then kingaku else 0 end) as 収入, sum(case syuusi when '支出' then kingaku else 0 end) as 支出, sum(case syuusi when '収入' then kingaku when '支出' then -kingaku else 0 end) as 収支 from suitoh_table where hiduke like '2007-5-%' and syuusi in('収入','支出') ;

rusya
質問者

お礼

遅くなりましたが、回答ありがとうございました。

その他の回答 (4)

  • ikiss
  • ベストアンサー率43% (34/79)
回答No.4

あああ、ごめんなさい!! 支出と収入のあとに'を入れておいてください。 連続投稿すみませんm(__)m

  • ikiss
  • ベストアンサー率43% (34/79)
回答No.3

下のSQL文、間違えました。 select sum(c.kingaku) from (select syuusi,sum(kingaku) from suitoh_table where hiduke like '2007-5-%' group by syuusi having syuusi = '収入 union all select syuusi,sum(kingaku) * -1 from suitoh_table where hiduke like '2007-5-%' group by syuusi having syuusi = '支出) c group by c.syuusi;

  • ikiss
  • ベストアンサー率43% (34/79)
回答No.2

テスト環境がないので、実験的なこともかねて。 以下のSQLでは駄目ですかね? select syuusi sum(kingaku) from c group by c.syuusi (select syuusi,sum(kingaku) from suitoh_table where hiduke like '2007-5-%' group by syuusi having syuusi = '収入 union all select syuusi,sum(kingaku) * -1 from suitoh_table where hiduke like '2007-5-%' group by syuusi having syuusi = '支出) c;

rusya
質問者

お礼

遅くなりましたが、回答ありがとうございました。

  • TA-HT81S
  • ベストアンサー率39% (72/184)
回答No.1

収入と支出のそれぞれの合算を、2レコードで取り出すように期待されている以上、できないと思います。 支出をマイナス値でセットしておけばあるいは…とも思いましたが、2レコードで取り出すことを期待されている以上、変数にセットして演算する必要があると思います。

rusya
質問者

お礼

遅くなりましたが、回答ありがとうございました。

関連するQ&A

  • JOINで1つのテーブルに空白があると表示されない

    質問失礼します。 下記のSQL文にて条件に合うものを表示しています。 select table.*, group_concat(table2.title separator '') as title1, table2.non from table2 join table on table.non = table2.non WHERE table.hiduke = '2012-09-21' AND table.genre LIKE '%ポップス%' group by table2.non すると、table.non はあるが table2.non がない場合、表示されなくなります。 table2.nonはなくてもtable.nonを表示させたいのです。 ご教授お願い致します。

    • ベストアンサー
    • MySQL
  • 簡単なSQLを書くには?

    あるテーブルに列が40~50個ほど存在しており、そのテーブルに置いて合計を求めたいと考えております。 通常の方法であれば、 SELECT SUM(a1), SUM(a2), SUM(a3),.... `table` WHERE b1="0" OREDER BY c1 と書くのですが、列が40個もSUM()を書き続けるのが面倒なので何か簡単に合計を求めるSQLをご存じありませんでしょうか?

    • ベストアンサー
    • MySQL
  • group by で重複行を、縦横に展開したい

    下記のようなテーブルがあります。 テーブル名:masta フィールド:hinmei,tani,hiduke,ryou これを 品名 | 単位 |1月|2月|3月| A   |リットル|10|20|30| B   |グラム |12|13|14| のようにてんかいしたいのです。 現在SQLは SELECT Hinmei ,Tani ,Hiduke ,SUM(ryou) as ryou FROM masuta WHERE hiduke BETWEEN '200801' AND '200812' GROUP BY Hinmei ,Tani ,Hiduke このようにしてますが、横てんかいの方法が分かりません。 どのようなSQLをかけばいいのでしょうか?

  • oracle sqlで先頭の1件を取得

    こんにちはみなさん。 現在、Oracle10gR2を使用しています。 そこで、以下のようなテーブルが存在します。 table_A(明細テーブル) denday | cd | suu | kingaku 2011/03/05 | 1| 1| 1000 2011/03/10 | 1| 2| 2000 table_B(マスタ) cd| henkoday | nm 1 | 2011/03/01| testA 1 | 2011/03/02| testB 1 | 2011/03/06| testC 上記マスタはcd、henkodayで管理しています。 上記table_Aとtable_Bを結合したいと思います。 そこで select t1.* ,t2.* from (select * from table_A order by denday) t1, (select * from table_B order by cd,henkoday desc) t2 where t1.cd=t2.cd and t1.denday>=t2.henkoday とした場合、マスタの3件分、明細データの重複ができてしまいます。 それを、直近の該当マスタのみ参照したいのですが、 以下のようなデータ抽出 table_A(明細テーブル)     table_B(マスタ) denday | cd | suu | kingaku | cd | henkoday | nm 2011/03/05 | 1 | 1 | 1000 | 1 | 2011/03/02 | testB 2011/03/10 | 1 | 2 | 2000 | 1 | 2011/03/03 | testC そのSQLがわかりません。 どうかよろしくお願いします。

  • サブクエリについて

    サブクエリが上手く行きません、何が間違ってるのでしょうか? select IODate, (select sum(Price) as "収入" from dailyio where IO='収入' group by IODate) , (select sum(Price) as "支出" from dailyio where IO='支出' group by IODate) from dailyio group by IODate; dailyio------------------------------------- フィールド名 型 Code bigint(20) IODate date IO varchar(255) Koumoku varchar(255) Syousai varchar(255) Memo text Price bigint(20) ----------------------------------------------- ご多忙中とは存じますが宜しくご教授お願いします。

    • ベストアンサー
    • MySQL
  • 複数の副問合わせにて、一つだけデータがない場合の対処法は?

    テーブルの各区分に応じて、数量を個々に集計するSQLを作成しております。 そして以下のようなSQLを作りました。 SELECT TBLA.SURYO_1 ,TBLB.SURYO_2 , TBLC.SURYO_3 ,TBLD.SURYO_4 FROM (SELECT SUM(SURYO) AS SURYO_1 FROM TEST_TABLE WHERE TEST_KUBUN = '1' GROUP BY SURYO) TBLA, (SELECT SUM(SURYO) AS SURYO_2 FROM TEST_TABLE WHERE TEST_KUBUN = '2' GROUP BY SURYO) TBLB, (SELECT SUM(SURYO) AS SURYO_3 FROM TEST_TABLE WHERE TEST_KUBUN = '3' GROUP BY SURYO) TBLC, (SELECT SUM(SURYO) AS SURYO_4 FROM TEST_TABLE WHERE TEST_KUBUN = '4' GROUP BY SURYO) TBLD しかし、この方法ですと、区分'1','2','4'はデータがあるのに対して、区分'3'は データがないことにより、SQLを実行すると、対象データがないという結果となります。 当然個別にSQLを実行すればよいですが、速度的に4回もSQLを実行するのは効率悪いので、 出来れば一回で行いたいのですけど、区分'3'がデータがなくても、他の3つの区分のデータ を取得する方法はありますでしょうか? よろしくお願いします。

  • Select文を含むUpdateの記述方法を教えて下さい。

    支払済の、円とドルの合計を求めて、それを記録したい場合。 update `table2` set (paidyen,paiddol) = (select sum(yen),sum(dol) from `table` where `paid` = '支払済') と記述は出来ないのでしょうか? update `table2` set paidyen = (select sum(yen) from `table` where `paid` = '支払済'), paiddol = (select sum(dol) from `table` where `paid` = '支払済') だと動作するのですが無駄な記述が多いような。 簡潔に出来る方法はありますか? ご存知の方教えてください。

  • SQL文 この部分はなんていうのでしょう?

    SELECT T_テーブル1.フィールド1 FROM T_テーブル1 ORDER BY T_テーブル1.フィールド1; なら、 ”ORDER BY句” SELECT T_テーブル1.フィールド1 FROM T_テーブル1 WHERE (((T_テーブル1.フィールド1)="A")); なら ”WHERE句” と言いますが、 DELETE Table1.* FROM Table1; や UPDATE テーブル1 Set テーブル1.フィールド1 = "い" WHERE (((テーブル1.フィールド1)=”あ")); や DROP Table Table1; の deleteやupdateやdropの部分は何て言うのでしょうか? そのまま、SELECT句DELETE句などというのでしょうか?

  • SQL、between の指定方法について

    こんにちは、SQLについての質問なのですが、 PHPで以下のように、テキストボックスを指定して、値を検索 するような作りにしています。 print "<table><tr align=center>"; print "<td align=left>◎日付検索<br>"; print "<input type=text name=s_hiduke></td>\n"; print "<td align=left>◎入力者<br>"; print "<input type=text name=s_name></td>\n"; $where = ''; if($s_hiduke != ""){ $where .= $where ? "and s_hiduke~'$s_hiduke' ":"where  s_hiduke~'$s_hiduke' "; } if($s_name != ""){ $where .= $where ? "and s_name~'$s_name' ":"where  s_name~'$s_name' "; } if (!$sql) { $sql = "select * from syuhou_table ".$where;} else {$sql = str_replace("\\","",$sql);} 今回日付の部分にテキストボックスをもう一つ追加し、「5/10~5/15」 のように期間指検索が定出来るようにする為以下のようにソースを 変更したのですが上手く動作しません… print "<input type=text name=s_hiduke>~<input type=text name=s_hiduke2>&nbsp;&nbsp;</td>\n"; $where = ''; if($s_hiduke != ""){ $where .= $where ? "and s_hiduke~'$s_hiduke',  s_hiduke2~'$s_hiduke' ": "where s_hiduke between    s_hiduke~'$s_hiduke' and s_hiduke2~'$s_hiduke' "; } 何処を直せば正常に動くのか、お分かりになる方がいらっしゃいま したら、アドバイス頂けませんでしょうか。 長々とした文章になってしまい申し訳ございませんが、よろしく お願いいたします。

  • Mysql サブクエリの使い方

    table_A ---+------ id | count ---+------ 1 | 5 ---+------ 2 | 6 ---+------ 3 | 7 ---+------ table_B ---+----- id | sub_count ---+----- 1 | 2 ---+------ 2 | 2 ---+------ 3 | 5 ---+------ 1 | 3 ---+------ 2 | 4 ---+------ このようなテーブルで table_Aのcountと、table_Bのidでまとめたsub_countの合計が 一致しないidだけを抽出するために、 SELECT table_A.id FROM (SELECT sum(table_B.sub_count) FROM table_B GROUP BY table_B.id) AS B, table_A, table_B WHERE table_A.id = table_B.id AND table_A.count != sum(table_B.sub_cout) と書いてみましたが、うまくいきません。 ERROR 1111 (HY000): Invalid use of group function 何が悪いのでしょうか? mysqlも投稿も初心者です。 よろしくお願いします。

    • ベストアンサー
    • MySQL