- 締切済み
グループ化したSQLの書き方について
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)
- 専門家の回答
みんなの回答
- twin_shu
- ベストアンサー率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で取ってきたデータをキーに、もう一回検索をかけて取りに行くというだけです。 ただ、そのテーブルだとキー項目が予測つかないので、合ってるかどうかはわかりませんが(^-^;
お礼
>テーブルの得点がテキスト型で、そのSQL文でほんとに取れますか? >テキスト型だと、正確なMAX値が取れないはずなんですが・・・ >試しに得点が「99」と「100」のデータで実行してもらえますか? >テキスト型だと「99」のほうを取ってきてしまうはずです。 はい。その通りでした。危うく迷路に入るところでした。 ありがとうございました。