- ベストアンサー
項目ごとに最大値の行を表示したい
accessにて、毎週行うテストの成績管理を作成しようと思っています。 T_成績 ID 試験回 科目 点数 1 10 1 80 1 10 2 70 1 11 1 60 1 11 2 75 2 10 1 80 2 10 2 75 2 11 1 95 2 11 2 65 3 10 1 45 3 10 2 55 上記のようなテーブルから各生徒のIDと科目ごとに 最高点を表示するため下記のようにしました。 SELECT T_成績.ID, T_成績.科目, max(T_成績.点数) AS 最高点 FROM T_成績 GROUP BY T_成績.ID, T_成績.科目 結果 ID 科目 最高点 1 1 80 1 2 75 2 1 95 2 2 75 3 1 45 3 2 55 これだと、第何回の試験で取った点数かが分からないので下のように ID 試験回 科目 最高点 1 10 1 80 1 11 2 75 2 11 1 95 2 10 2 75 3 10 1 45 3 10 2 55 最高点を取った時の試験回も表示したいのですが、 うまくいきません。どのようにすればよいのでしょうか? よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
あらかじめ SELECT T_成績.ID, T_成績.科目, max(T_成績.点数) AS 最高点 FROM T_成績 GROUP By T_成績.ID, T_成績.科目 クエリを成績集計クエリとして作成しておくこと _____________________________________________________________ SELECT DISTINCT T_成績.Id, T_成績.試験回, T_成績.科目, 成績集計クエリ.最高点 FROM T_成績 INNER JOIN 成績集計クエリ ON (T_成績.Id = 成績集計クエリ.ID) AND (T_成績.科目 = 成績集計クエリ.科目) AND (T_成績.点数 = 成績集計クエリ.最高点) ORDER BY T_成績.Id, T_成績.試験回, T_成績.科目; ___________________________________________________________ の連結で OKです。 コピーして実験してください。 実験済みです。
その他の回答 (2)
- CHRONOS_0
- ベストアンサー率54% (457/838)
サブクエリを使えばクエリひとつでも実現できますが せっかく集計クエリまで作ったのなら 集計クエリと元のテーブルをクエリデザインビューに取り込み IDと科目で結合してもいいですね
お礼
ご回答ありがとうございます。 なるほど、結合させればよかったのですね。 勉強不足のため、まったく気が付きませんでした。 大変勉強になりました。 ありがとうございます。
例えば、最高得点が同一の回があった場合はどうするのですか?
お礼
ご丁寧なお答え、ありがとうございます。 おかげさまで、上記の文でうまく出来ました。 1日悩んだのですが、答えを見ると基本的なことですね。 勉強になりました。ありがとうございます。