• ベストアンサー

この場合の賢いSQL文は?

id name age 1 Jone 22 2 Jone 21 3 Kelly 20 このケースで同名Joneは2人いるので、2人目のJoneは無視して、 Jone 22 Kelly 20 といったデータを取得したいのですが、方法はございますでしょうか? Jone 21 Kelly 20 でもかまいません。DISTINCT使っちゃうと Jone Kelly しか取得できないし、どうしてもわかりません。ご教示お願いいたします。

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

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.4

id は一意なんでしょ? 一意だと仮定するなら、理論は以下の通りです。 (1)nameでグループ化する。 (2)グループ化した際のid は最小値(最初に出た方)とする。 (3)このidと一致するデータを抽出する。 SELECT A.* FROM table A INNER JOIN (SELECT name,MIN(id) uid FROM table GROUP BY name) B ON A.name=B.name AND A.id=B.uid

shizer
質問者

お礼

返信ありがとうございます。INNER JOINとか使ったこと無いので、調べて試してみます。

その他の回答 (3)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

MySQLにはこういういい加減な処理があります SELECT name,age FROM テーブル group by name あまりおすすめできません。 実際、データを確定できないのであればSQLに処理をさせるのは危険です

shizer
質問者

お礼

ありがとうございます。是非試してみます。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

> ageのところがもし文字だったらどうなりますか? 文字であっても大小はあります。そうでなければ、文字列でのソートができないでしょ? 数値・文字列どちらでもそのままでOKのハズですが、 1 Jone twenty 2 Jone twenty-one のどちらが最大・最小になるか、は試してみてください。

shizer
質問者

お礼

ありがとうございます。是非試してみます。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

Oracleユーザなので多少異なるかも?だけど。 nameの最大・最小の場合なら、 最大の場合 select name, max(age) from <テーブル> group by name ; 最小の場合 select name, min(age) from <テーブル> group by name ;

shizer
質問者

お礼

返信ありがとうございます。ageのところがもし文字だったらどうなりますか?もしお分かりならご教示お願いいたします。 id name age 1 Jone twenty 2 Jone twenty-one 3 Kelly twenty

関連するQ&A