• 締切
  • すぐに回答を!

グループ化したSQLの書き方について

  • 質問No.4227415
  • 閲覧数47
  • ありがとう数2
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 47% (170/361)

XP&MySQL5&PHP5

ID,PASSWORD,name,tokutenn,zyukennbi,syozoku,bangou
というフィールド(すべてテキスト型)を持つテーブル(result)があります。
(ID,PASSWORD,名前、得点、受験日、所属、社員番号)
全個人が最高得点を記録したレコードだけはSQLで書けます。
select ID, name ,max(result.tokuten) as maxtokuten from result group by ID, name
ただ、最高得点を出したと同じレコードのそれ以外のフィールド(zyukennbi,syozoku,bangou)
を表示させるSQLがわかりません。

何方か、ご存知の方おられましたら、ご教授ください。
よろしくお願いいたします。

回答 (全1件)

  • 回答No.1

ベストアンサー率 100% (10/10)

テーブルの得点がテキスト型で、そのSQL文でほんとに取れますか?
テキスト型だと、正確なMAX値が取れないはずなんですが・・・
試しに得点が「99」と「100」のデータで実行してもらえますか?
テキスト型だと「99」のほうを取ってきてしまうはずです。



本題ですが、以下のSQL文で取ってこれると思います。

select a.tokuten, a.zyukennbi, a.syozoku, a.bangou
from result as a,
(select ID, name ,max(result.tokuten) as maxtokuten from result group by ID, name) as b
where a.ID = b.ID
and a.name = b.name
and a.tokuten = b.maxtokuten

ようは、質問文のSQLで取ってきたデータをキーに、もう一回検索をかけて取りに行くというだけです。

ただ、そのテーブルだとキー項目が予測つかないので、合ってるかどうかはわかりませんが(^-^;
お礼コメント
idek

お礼率 47% (170/361)

>テーブルの得点がテキスト型で、そのSQL文でほんとに取れますか?
>テキスト型だと、正確なMAX値が取れないはずなんですが・・・
>試しに得点が「99」と「100」のデータで実行してもらえますか?
>テキスト型だと「99」のほうを取ってきてしまうはずです。
はい。その通りでした。危うく迷路に入るところでした。
ありがとうございました。
投稿日時:2008/08/05 08:11
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ