- ベストアンサー
ACSESS 初心者 レコードAVG関数について
すみません、お分かりになる方、お教えいただきたいの ですが、アクセスのクエリでフィールドの合計を だしたいのですが、式がわかりません。 例: 以下のテーブルがあるとして、、 名前 テスト1 テスト2 テスト3 Aさん 50 65 70 Bさん 30 35 Aさんのテスト結果の合計を出す式を教えて欲しいです。 また、Bさんの2回目のテスト結果がない場合の合計も できる式でお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
s_husky です。 <生徒名> ID、名前 1、鈴木 2、中村 <成績簿> ID 生徒名_ID 試験番号 点数 1 1 1 56 2 2 1 67 3 1 2 32 4 2 2 24 という設計ですと AVG が使えます。 ID 氏名 点数の平均 1 鈴木 44 2 中村 45.5 SELECT DISTINCTROW 生徒名.ID, 生徒名.氏名, Avg(成績簿.点数) AS [点数の平均] FROM 生徒名 RIGHT JOIN 成績簿 ON 生徒名.ID=成績簿.生徒名_ID GROUP BY 生徒名.ID, 生徒名.氏名; ※ Access風のテーブル設計に踏む込むとリレーショナルデータベースの基礎知識が必要です。 ※ Excel風の使い方も、使用者のニーズに合致していれば否定しません。 ※ なぜ、AVG関数が使えないかの説明のための補足とご理解下さい。
その他の回答 (4)
- gori8063
- ベストアンサー率36% (116/319)
平均でしたね、すみません。 そうしたら、受験科目数を表示する列を作ってあげてあとで合計点を割ってあげればいいかと。 無文字=未受験とするのであれば SELECT テーブル1.氏名, テーブル1.テスト1, テーブル1.テスト2, テーブル1.テスト3, Val([テスト1] & " ")+Val([テスト2] & " ")+Val([テスト3] & " ") AS 合計点, IIf([テスト1] Is Null,0,1) AS 受験1, IIf([テスト2] Is Null,0,1) AS 受験2, IIf([テスト3] Is Null,0,1) AS 受験3, ([受験1]+[受験2]+[受験3]) AS 受験科目数, [合計点]/[受験科目数] AS 平均点 FROM テーブル1; でどうでしょ。
お礼
ご丁寧にご教示いただきありがとうございました。 試してみます!
さて、これはチクッとややこしいです。 テーブルがエクセル風の設計のためにアクセスの関数が全く使えません。 力技しかありません。 ID 氏名 成績_01 成績_02 成績_03 1 山田 50 65 70 2 鈴木 30 35 ID 氏名 成績_01 成績_02 成績_03 1 山田 50 65 70 2 鈴木 30 0 35 は、当然に平均点が違ってきます。 2回受けた平均と3回の内1回が0点とで計算を変えなければならないからです。 氏名 受験数 平均点 山田 3 61 鈴木 2 32 そこで、このような結果を返すクエリを考えてみました。 SELECT 氏名, Abs((NZ([成績_01],-1)>=0)+(NZ([成績_02],-1)>=0)+(NZ([成績_03],-1)>=0)) AS 受験数, Int((nz([成績_01])+nz([成績_02])+nz([成績_03]))/[受験数]) AS 平均点 FROM 成績一覧;
お礼
ご指摘の通り、テーブルがエクセル風、、 もっと勉強します! 今回はありがとうございました!
- gori8063
- ベストアンサー率36% (116/319)
クエリの設定画面で 「フィールド」に新たに [テスト1] + [テスト2] + [テスト3] と入力してリターンすれば 式1: [テスト1] + [テスト2] + [テスト3] と出て計算されます。 このあと編集して「式1:」を「合計点:」と書き直せばタイトルにも「合計点」と出ます。
お礼
わかりにくい質問で、すみませんでした! ご回答ありがとうございました!
- rokko-oroshi
- ベストアンサー率17% (299/1664)
AVG関数ってのは平均なので、Aさんの場合61.7になるのでは? 合計だとSUM関数だと思います。
お礼
ありがとうございます。 よく理解できていないため、ちゃんとした質問に なっていないところ、ご回答いただきありがとうございました!
お礼
大変貴重なご助言、感謝致します。 まだまだ勉強が足りてない状態です。 今後もご指導いただけますと幸いです。ありがとうございました!