• ベストアンサー

項目ごとに最大値の行を表示したい

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 最高点を取った時の試験回も表示したいのですが、 うまくいきません。どのようにすればよいのでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • NOBNNN
  • ベストアンサー率50% (93/186)
回答No.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です。 コピーして実験してください。 実験済みです。

greenntea
質問者

お礼

ご丁寧なお答え、ありがとうございます。 おかげさまで、上記の文でうまく出来ました。 1日悩んだのですが、答えを見ると基本的なことですね。 勉強になりました。ありがとうございます。

その他の回答 (2)

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.2

サブクエリを使えばクエリひとつでも実現できますが せっかく集計クエリまで作ったのなら 集計クエリと元のテーブルをクエリデザインビューに取り込み IDと科目で結合してもいいですね

greenntea
質問者

お礼

ご回答ありがとうございます。 なるほど、結合させればよかったのですね。 勉強不足のため、まったく気が付きませんでした。 大変勉強になりました。 ありがとうございます。

noname#30536
noname#30536
回答No.1

例えば、最高得点が同一の回があった場合はどうするのですか?

関連するQ&A