- ベストアンサー
ACSESS 初心者 レコードAVG関数について
- みんなの回答 (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関数だと思います。
お礼
ありがとうございます。 よく理解できていないため、ちゃんとした質問に なっていないところ、ご回答いただきありがとうございました!
関連するQ&A
- Acsessにて
初心者です。 あるテーブルのフィールドの値を、クエリを作成した時に除外したいのですが、 教えていただけましたら幸いです。 例 テーブル1 あ 111 い 222 う 333 え 444 お 555 テーブル2 222 444 出したい結果 クエリ1 あ 111 う 333 お 555 よろしくお願いいたします。
- 締切済み
- その他(データベース)
- アクセス DLookup関数 なぜエラーになるのか
アクセス DLookup関数 なぜエラーになるのかわからないです。 testと言うテーブルがあり、a・bと言うフィールドがあります。 aフィールドにあああと入ってる場合のbフィールドの値を取得したいのですが Debug.Print DLookup("[b]", "test", "[a] = あああ") だと、 実行時エラー2471「クエリ パラメータとして指定した式でエラー'[あああ]'が発生しました。」 になります。 どこがおかしいのか教えていただけますか?
- ベストアンサー
- オフィス系ソフト
- アクセスのクエリ フィールドの合計
フィールドの合計 アクセスのクエリでいくつかのフィールドの合計を出そうとして クエリのフィールドに以下の式をいれております。 ⇒合計:([A])+([B])+([C]) (例えば[A][B][C]のフィールドの合計を出すとして) しかし、[A]の値が1、[B]の値が2、[C]の値が2と入っている場合は5と合計値が当然でますが 例えば[C]のフィールドが空欄の場合、合計値欄が空欄で表示されます。 非常に簡単な質問かと恐縮ですがおしえてください!
- ベストアンサー
- オフィス系ソフト
- アクセスのクエリでパラメータを表示させない方法は?
超初心者の質問ですみません。。 アクセスのクエリで、ある数字の全体に対して占める割合を求めるため、以下のような式をいれています。 フィールドC: [フィールドA]/[フィールドB] このクエリを開いたときに毎回パラメータが表示されるのですが、これを表示させないためにはどのようにすればよいのでしょうか?OKを2回押せばきちんと計算された値が入ってくるのですが、毎回OKを押さずに開けるようにしたいです。 ちなみに、フィールドAとフィールドBは、あるテーブルに入っている値をクエリ側で 集計 を「合計」に設定して求めた値が入っていて、フィールドA~Cは同じクエリの中にあります。 VBAやSQLはまったく理解できません。 よろしくお願いします。
- ベストアンサー
- その他MS Office製品
- ACCESS クエリでの抽出の方法について
毎度お世話になっております。 ACCESS2003、SQLSERVER2000を使用しています。 以下のテーブルがあります。 テーブル1 フィールド1 フィールド2 A 10 A 20 A -10 B 1 B 2 B 3 フィールド1をグループ化し、 フィールド2に0より小さい数がある場合はNG、 ない場合はOKと表示したいのです。 希望する結果 フィールド1 フィールド2 A NG B OK 私が考えた方法は、 1.クエリ1(フィールド2が0以下のフィールド1を抽出する)を作成 2.テーブル1とクエリ1をLEFT JOINし、IS NULL ならOK、そうでないならNGを表示 としました。希望した結果は得られましたが、 もっとスマートな方法(一つのクエリでできるような方法)、 または別解をご教授ください。 よろしくお願いします。
- ベストアンサー
- SQL Server
- 条件を満たした次のレコードから
初めまして(^^ ACCESSのクエリでの質問をさせて頂きます。(^^;; テーブルA ID,重量 と2つのフィールドを持ったテーブルAがあるとします。 テーブルB (金額テーブル kg/円) 10t以下,10t以上 と2つのフィールドを持ったテーブルBがあるとします。 (内容は 10t以下: 11円 10t以上:10円) 上記のテーブルAとテーブルBのデータを使用してクエリAを作成します。 クエリA(テーブルBはテーブル表示にてクエリA内に表示させてあります。) 既存のフィールド: ID,重量 新に作成するフィールド:累計重量,金額 ID ←そのまま表示 重量 ←そのまま表示 累計重量: DSum("重量","テーブルA","ID<=" & [ID] & "") ←累計の重量を算出 金額: IIf(DSum("重量","テーブルA","ID<=" & [ID] & "")<=10000,Int([テーブルB]![10t以下]*[重量]),([テーブルB]![10t以上]*[重量])) ↑ 累計重量で10t以下と10t以上の金額の割合を変更して算出させる。 テーブルAのデータとして↓ ID 重量 1 1000.6 2 2150.7 3 1821.2 4 5578.3 5 650.5 上記内容にてクエリAを実行すると多分下記の様に表示されます。 ID 重量 累計重量 金額 1 1000.6 1000.6 11006 2 2150.7 3151.3 23657 3 1821.2 4972.5 20033 4 5578.3 10550.8 55783 5 650.5 11201.3 6505 でも本当は下記の様な結果を得たいのです。 ID 重量 累計重量 金額 1 1000.6 1000.6 11006 2 2150.7 3151.3 23657 3 1821.2 4972.5 20033 4 5578.3 10550.8 61361 ←累計で10tを超えたレコードまでは1kg/11円で計算させたい。 5 650.5 11201.3 6505 ←ここから 1kg/10円の計算にしたい。 望む結果を得るためには下記の文にて条件を付け足していくと思いますが 金額: IIf(DSum("重量","テーブルA","ID<=" & [ID] & "")<=10000,Int([テーブルB]![10t以下]*[重量]),([テーブルB]![10t以上]*[重量])) どのような条件の付け方をすれば良いか、困ってしまいました。そのものズバリの答えをお聞きするには余りにずうずうしいと思いますので、 ヒントや似たような感じの例などをご教示頂けたらと思います。 何卒、宜しく御願い致します。
- ベストアンサー
- その他(データベース)
- access 重複しているレコードを抽出したい
2010です。 テーブル1 testフィールド a a b b c の場合、aとbが重複していますが クエリで、 a b もしくは a a b b を抽出する方法を教えてください。
- ベストアンサー
- オフィス系ソフト
- Accessフォームから条件抽出する
access2010で、フォーム内のリスト選択によって、 クエリのフィールドの計算を変えたいです。 「クエリ1」のフィールド名 いずれも数値 ・合計 ・A ・B ・C 「フィールド1」の「リスト1」で、1;2;3いずれか選択し、 選択した結果を「合計」に表示させたい。 ・リスト「1」のとき、Sum(A,B) ・リスト「2」のとき、Sum(A,B,C) ・リスト「3」のとき、Sum(A,B,C,D) できれば「合計」のフィールドの式のみで済ませたいのですが、 何か適切な式はありませんでしょうか。 よろしくお願いいたします。
- ベストアンサー
- その他MS Office製品
- クエリ表示と、ADOで抽出したレコードセットが違う
Accessで作ったクエリで表示されるデータと、VBAでSQLを組んでそのクエリから抽出したデータが異なるので困っています。 ちょっと言葉では説明しにくいので表で説明します。 元となるテーブル(t_test)がたとえば以下のようになっているとします。 t_test 顧客id 商品id 1 A-1 2 A-2 3 B-1 4 A-1 これを元に、以下のようなクエリ(q_test)を作ります。 q_test 顧客id 商品id 式1: IIf([商品id] Like "A*",1,0) 1 A-1 1 2 A-2 1 3 B-1 0 4 A-1 1 VBAで以下のようなSQLを実行すると、なぜか式1の値が全て0となります。 sql = "SELECT * FROM q_test" 1 A-1 0 2 A-2 0 3 B-1 0 4 A-1 0 式1でLIKEを使っていることが原因なのか、 IIf([商品id] = "A-1",1,0) とかだと、クエリとSQLの結果に違いはありません。 IIfだけでなくSwitchを使った場合も同様(LIKEだとおかしい、=だと平気)でした。 ちなみに、Accessのバージョンは2003、VBAで使っているレコードセットはADODBです。 (今確認したところ、DAOでは問題なくできました。) 冒頭で、困っていると書きましたが、これを回避する方法はいくつか思いついていますので、 別の方法を教えていただきたいわけではなく、単純になぜこのようなことが起きるのかが知りたいです。 是非よろしくお願いします。
- 締切済み
- オフィス系ソフト
- 【初心者】ACCESSで異なるテーブルの数値を比較~計算したいです。
またまたACCESSに詳しい方がいましたらお教え下さい。 テーブルA 名前|金額 ----------- 太郎|3000 次郎|2000 三郎|1000 テーブルB 名前|借入 ----------- 太郎|1000 次郎|2000 三郎|3000 こんなテーブルが2つあった場合。(名前フィールドはAもBも同じ) クエリで金額と借入を比較し、金額>借入の場合に表示。かつ表示するものは金額-借入の 数値とする場合は、どのようにすればいいでしょうか。。 (金額<借入の場合は表示自体しなくて良い) 【結果イメージ】 名前|結果 ----------- 太郎|2000 ご存知の方がいらしたら、お教え下さい。
- ベストアンサー
- オフィス系ソフト
お礼
大変貴重なご助言、感謝致します。 まだまだ勉強が足りてない状態です。 今後もご指導いただけますと幸いです。ありがとうございました!