• ベストアンサー

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

  • nikuq
  • お礼率75% (477/631)
  • MySQL
  • 回答数3
  • ありがとう数5

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

  • ベストアンサー
  • venzou
  • ベストアンサー率71% (311/435)
回答No.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() で合計を取れば、条件に合うレコードをカウントできます。

nikuq
質問者

お礼

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

その他の回答 (2)

  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.2

> data1が1の場合の合計を集計する data1の合計値ですか?でしたら、 select sum(data1) from hoge_table where data1 = 1; でよいのではないでしょうか。 > data1が2で、data2が0の場合といった複数の条件を指定して合計を出したい 何の合計値でしょうか?

nikuq
質問者

お礼

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

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.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

nikuq
質問者

お礼

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

関連するQ&A

  • 複数のグループ化での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
  • mysqlで年と月を別々のカラムに収納しています

    mysql5.1を利用してデータベースを作成しています。 テーブルに年と月を別々で収納しているのですが、 そのテーブルの中のデータから「今月を過ぎていなければ」という条件で抽出したいのですが、 SQLの書き方がわかりません。 私のSQLの基礎の基礎しか教えてもらっておらず、 あとは独学で、現在のレベルはようやく少しサブクエリを書き出した(学びだした)レベルです。 しかもwindows上のNavicat Lite(アプリ)上で書いてる状態です。 自分のイメージ的には下記のような感じなのですが、動きません。 どなたか教えていただけないでしょうか。 よろしくお願いします。 hoge_tblテーブルからBカラムが'hoge'かつ、 hoge_tblテーブル内のYEARカラムとMONTHカラムの値を今月と比較して、 「今月を過ぎていなければ」といった条件を付けたいと考えております。 select A from hoge_tbl where B = 'hoge' and (select date_format(now(),'%Y%m') as NOW) < (select date_format('(select YEAR,MONTH from hoge_tbl )’,'%Y%m') as END)

    • ベストアンサー
    • MySQL
  • MySQL4.1.15でのSUM関数でDISTINCTについて

    お世話になっております。 MySQLの4.1.15を使用しております。 合計を出すSUM関数を使用し、重複する値を除外させて計算させる方法はありませんか? MySQL5.1からはSUM関数にDISTINCTをつければ重複値を削除できますが、4.1.15で同じ計算をさせる方法が分かりません。 ご教授の程宜しくお願いします。

    • ベストアンサー
    • MySQL
  • case whenとsum関数の併用について

    Oracle9iのSQLPLUSにて、select結果の最終行に合計を出力したいだけなのですが、以下のようにcase when~と、sumを併用した場合に正しい合計値が集計されません。 select AAA,BBB,CCC,sum(DDD),(case when sum(EEE < 0 then sum(EEE-(EEE*2)) else sum(EEE) end) from table_A group by GROUPING SETS(AAA,BBB,CCC),()); AAA,BBB,CCC,270,270 AAA,BBB,CCC,-270,-270 AAA,BBB,CCC,60,60 , , ,60,600 600×⇒60○ もしくは他に最終行にうまく合計値を出力する方法はありますでしょうか? よろしくお願いします。

  • MySQL5で、SUMした値を新たにカラムとして追加したビューを作成し

    MySQL5で、SUMした値を新たにカラムとして追加したビューを作成したいのですが、どういうSQLを書けばよいかわかりません。 今、Aというテーブルがあり、f1,f2,f3というカラムがあります。 このテーブルを元にvwAというビューを作成したいのですが、その際、f1でGroup Byしたf2のSUMをf2Keiというカラム名で追加し、最終的にf3とf2Keiという2つのカラムを持ったビューにしたいです。 create view vwA as select f3,select SUM(f2) as f2Kei from A GROUP BY f1 from A; と書いてみましたがエラーを返されました。 どのようなSQLを書けばよいか、ご教授ください。

  • MySQLで縦の計算について

    いつも大変お世話になっております。 MySQLでレコードの特定のカラムの縦の合計を出す方法は無いのでしょうか? 例えば下記のようなテーブルがあるとします。 hoge_total |id|total1|total2| |2|100|600| |3|200|700| |4|300|800| |5|400|900| |6|500|1000| 各レコードに対して横の合計を出すなら select *,total1 + total2 as total from hoge_total hoge_total |id|total1|total2|total| |2|100|600|700| |3|200|700|900| |4|300|800|1100| |5|400|900|1300| |6|500|1000|1500| といった感じで簡単に出せますが、total1、total2を縦に計算した合計が出せないのでしょうか? 結果としては hoge_total |id|total1|total2|total| |2|100|600|2100| |3|200|700|2100| |4|300|800|2100| |5|400|900|2100| |6|500|1000|2100| ※total1を縦に合計した値をtotalとして取り出す こんな感じにしたいんですが、MySQLでは出来ないのでしょうか? 何卒、ご教授の程、宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • Mysql関数でデータ更新に関する基本的な質問

    ■使用環境 FreeBSD 6.2 Mysql4.0.27 PHP5.2.3 Mysql関数 PHP5でMysqlデータベースの更新時に、現在のcolumnの内容に 新しく入ってきた数値を加算したいのですが、sum()という関数 がある事までは解ったのですが、この場合の使い方が解りません。 SQL自体、接続と検索処理しか使った事が無く、初心者と過程して、 教えていただけませんでしょうか。 ※sum()関数の使用が適切で無ければ、申し訳ありません。 ■補足 テーブル名:test カラム名 :ruikei 知りたい事。 入力フォームより送られてきた、新しい売り上げ'$uriage'を 'test'テーブル'ruikei'にPHP取得変数'$uriage'を加算する MySQL文を発行するPHPコード。

    • ベストアンサー
    • MySQL
  • MySQLのデータファイルの位置について

    MySQLでテーブル、データベースを作成したのですが、 OS上から作成したテーブル・データベースが保存されているファイル(データファイル?) が見つけられません。 テーブルにデータをインサートしてコミットして、 セレクトを行ってデータは反映されていることは確認しています。 OSはWindows 7 MySQLのバージョンは5.5です。 user_dbというデータベースを作成し、 show databasesを行った結果、 information_schema mysql performance_schema test user_db が表示されることから、データベースuser_dbは正常に作られていると思います、 user_dbに対して、インサートは可能で、一度データベースを停止して、 再起動後、インサートしたデータがみれています。 しかし、インストールフォルダのMy.iniのdatadirで指定されているフォルダには mysql performance_schema のフォルダしかない状態です。(ここにuser_dbフォルダが作成されると思うのですが) どこにデータが保存されているのでしょうか?

    • ベストアンサー
    • MySQL
  • SQLでSUMなどの関数でデータが無い時に0を返したい。

    SQLでSUMなどの関数でデータが無い時に0を返したい。 (例) SELECT SUM(項目) FROM テーブル WHERE 条件 ここで、条件に一致するデータが1件も無かった時ですが、 何かNULLのような物が1件返ってきているようです。 この条件に一致する物が無かった時に、 0を返したいのですが、可能でしょうか? よろしくお願いします。

  • ACCESSでのSUM関数ついて

    CS検定平成19年度版 データベース部門3級の問題を解いています。 http://8.dtiblog.com/t/tortue2006/file/20090301095722.pdf 課題7の5の問題がわかりません。 クエリで、SUM関数を使って、合計金額というフィールドを作成し、 「施術料金の合計」と「スタイリスト料金の合計」を合計するとあるのですが、 まず、集計行には、何を指定したらいいのでしょうか?(合計?演算?) 合計金額:SUM([施術料金の合計]+[スタイリスト料金の合計]) と入れると・・・ 「・・・集計関数は使用できません」とか 合計金額:[施術料金の合計]+[スタイリスト料金の合計] と入れれて集計行に「合計」を指定すると・・・ 「式に・・・サブクエリは使用できません」などが出ます。 基本がきちんと理解できていないようで、申し訳ないのですが 宜しくお願いします。