• 締切済み

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を書けばよいか、ご教授ください。

みんなの回答

回答No.2

やりたいことを、具体的に提示してください。 「どういった母体データから、どういう結果を得たい」といったことの説明なしに、他人には適切なアドバイスはできません。 f1でグループ化したら、f3も一意になるのですか? もしそうであれば、一般的なSQLとしては文法エラーですが、”MySQLでは拡張仕様”で動きます。 もし一意にならないなら、誤った”MySQLの拡張仕様”の使用になります。 f3が年度で、2009とか、2010とか入っているのでしょうか? f1は月で、1~12とかが入っているのですか?それとも、年月が入っているのですか? もし、1~12といった値が入っているなら、group byで結果は12行できる訳ですよね? そして年度とは、どのようにくっつけるというのでしょうか??? 単年度しか集計しないように、検索条件を指定する? →もしそうなら、そういった提示があって当然ですよね? 年度に関係なく、月別で集計したい? →もしそうなら、結果に年度をどのようにくっつけるのですか?

回答No.1

MySQL5といった書き方はやめましょう。MySQLは、4.0以前と4.1以降では、大きな機能追加があり、一部の仕様変更があります。また、MySQL 5.0、5.1も同様です。さらには、一部機能では、MySQL 5.1.xxで仕様変更なんてのもあります。 まず、文法の誤り。 select句中にサブクエリを書く場合は、()で囲む必要があります。 例えば、こんな感じ。 select c1,(select c2 from t2 where ・・・) as x from t1 次に、SQLとしての誤り。f3とf1、f2の関係が不明。 標準SQLや主要なRDBMSでは、group by指定時、select句で指定できるのは、 (1)group byで指定した列 (2)maxなどの集計関数 (3)定数 といったもので、それ以外の列を指定することは許されません。 今回のケースでは、f3がどの行のf3かを決められません。MySQLの標準の設定では、これをエラーにせず、結果もユーザ責任という利用者が誤りやすい仕様になっています。

noname#226333
質問者

お礼

ご回答ありがとうございます。 説明不足で申し訳ありませんでした。 MySQlのバージョンは5.1.39でした。 f1が月度、f2が売り上げ、f3が年度、で、 select SUM(f2) as f2Kei from A GROUP BY f1 from A; という記述で、f1の月度ごとにf2の売り上げを集計して、それをf2Keiというカラム名で新しくビューに追加したかったのです。f3はテーブルからそのままビューに持ってくるだけ、ということです。 初心者なので、SQL自体あまり理解できておらず、おかしな質問になっているかもしれません。すみません。 その後、 create view vwA as select f3,SUM(f2) as f2Kei from A GROUP BY f1; で、やりたいことができた感じなのですが、間違ってますでしょうか? サブクエリを()で囲むということなので、本来は create view vwA as select f3,(select SUM(f2) as f2Kei from A GROUP BY f1) from A; が正しい記述ということになるのでしょうか?

関連するQ&A