アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (2件)

やりたいことを、具体的に提示してください。



「どういった母体データから、どういう結果を得たい」といったことの説明なしに、他人には適切なアドバイスはできません。

f1でグループ化したら、f3も一意になるのですか?
もしそうであれば、一般的なSQLとしては文法エラーですが、”MySQLでは拡張仕様”で動きます。
もし一意にならないなら、誤った”MySQLの拡張仕様”の使用になります。

f3が年度で、2009とか、2010とか入っているのでしょうか?
f1は月で、1~12とかが入っているのですか?それとも、年月が入っているのですか?

もし、1~12といった値が入っているなら、group byで結果は12行できる訳ですよね?
そして年度とは、どのようにくっつけるというのでしょうか???

単年度しか集計しないように、検索条件を指定する?
→もしそうなら、そういった提示があって当然ですよね?

年度に関係なく、月別で集計したい?
→もしそうなら、結果に年度をどのようにくっつけるのですか?
    • good
    • 0

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の標準の設定では、これをエラーにせず、結果もユーザ責任という利用者が誤りやすい仕様になっています。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
説明不足で申し訳ありませんでした。
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;

が正しい記述ということになるのでしょうか?

お礼日時:2010/05/31 11:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!