- ベストアンサー
SQLでレコードにある合計項目を使って計算を出したい
- SQLでレコードにある合計項目を使って計算をしたい場合、SUM関数とGROUP BY句を使用して各項目CDの金額を合計することができます。
- ただし、項目CD99の金額を全体の金額合計として使用し、各項目CDの金額で割るという計算を行いたい場合は、サブクエリを使用する必要があります。
- これにより、合計/各項目CDの金額の結果を求めることができます。しかし、実際にどのようにサブクエリを使うかは具体的なSQLの記述により異なるため、詳細なアドバイスを求める場合は具体的なSQLの記述を提供してください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
合計行があるデータなんですね。 たしかに命題にそう書いてありました。失礼しました。 しかしSQLで合計行を最初からもっていて意味がある のでしょうか?合計金額なんてものはどんどん 変わるものなのに・・・ 一応LEFT JOIN するのが妥当でしょうけど、 ホントに効率てきなのか再検討する必要があると 思いますけど・・・ SELECT `t1`.`cd` , `t2`.`price` as `total` ,sum(`t1`.`price`) AS `sum` FROM `table` as `t1` LEFT JOIN `table` as `t2` on `t2`.`cd`='99' GROUP BY `t1`.`cd` なお所定の書式1200/500となると文字列になるので 多少処理はかわりますが、CASTとかCONCATすれば できると思います
その他の回答 (4)
- wkwk_koba
- ベストアンサー率15% (3/20)
ようは、 各CD毎に合計と総合計に対する割合いを 算出したいとの事でしょうか? cd=項目CD price=金額 select t1.cd, t1.p1, t1.p1/sum(p1) as 割合 from ( select cd ,sum(price) as p1 from table0 group by cd ) t1 概念的には、 こんな感じで取れそうな気がしますが。 ※細かな記述には誤りがあるかもしれません。 総合計はもとのデータ(列)として持っているので はないですよね。 持っていても無駄だと思います。
(1) (1) SELECT テーブル1.Amount FROM テーブル1; ・・・・・[テーブル1 クエリ1] (2) SELECT Sum(amount) AS Total FROM テーブル1;・・・[テーブル1 クエリ2] (3) SELECT [テーブル1 クエリ1].total, [テーブル1 クエリ].amount FROM [テーブル1 クエリ1], [テーブル1 クエリ2]; まあ、一番簡単なやり方は、2つのクエリを用意して目的のクエリを完成させることです。 ID CD Amount 1 1 \10 2 1 \10 3 2 \20 4 2 \20 5 3 \30 total amount \90 \10 \90 \10 \90 \20 \90 \20 \90 \30 ※99=Total という考えは、どうも...と思います。 となります。
- wkwk_koba
- ベストアンサー率15% (3/20)
項目CD 金額 ------------------------- 11 100 11 100 11 300 12 100 12 100 12 300 13 200 99 1200 CD 合計/小計 11→→1200/500 12→→1200/500 13→→1200/200 と言う事でしょうか? 合計と小計をCD毎に算出したい? 何故、各CD毎に 合計が必要なのですか?
- yambejp
- ベストアンサー率51% (3827/7415)
>例)1200/500 が、いったいなんなのかさっぱりわかりません。 なにをどうしたらこの例になるのでしょうか? >合計/各項目cdの金額の結果を出そうとしましたが、 「合計/各項目cdの金額の結果」とはなんでしょうか? もうすこし噛み砕いて例示していただければ 有効な回答がつきやすくなると思います。
お礼
書き込み有難うございました。 すみません、見直すと計算式を間違っていました。 例)500/1200 →項目CD11の金額/合計金額 になります。合計金額の中で項目CD11の金額が占める値を出す計算式になります。 噛み砕くと 金額(=各項目CDの金額)/レコード内にある項目CD99の金額(=全体の合計)を出すには・・ という事になります。