• ベストアンサー

基本的なSQL文

とても基本的なことだと思うのですが、以下のようなテーブルがあるとします。 create table test ( id numeric primary key, name varchar(45), age numeric ); これに例えば以下のようにデータを詰めたとします。 +----+----------+------+ | id | name | age | +----+----------+------+ | 1 | takeshi1 | 50 | | 2 | takeshi2 | 25 | | 3 | takeshi3 | 30 | | 4 | takeshi4 | 35 | | 5 | takeshi5 | 40 | | 6 | takeshi6 | 45 | +----+----------+------+ ここで最年少のレコードを取り出したいだけなのですが mysql> select id, name, min(age) from test;とすると +----+---------+----------+ | id | name | min(age) | +----+---------+----------+ | 1 | takeshi1| 25 | +----+---------+----------+ 年は最年少が取り出されますがidとnameは一行目が取り出されているようです。どのようなSQLを書けば以下のようになるのでしょうか。 +----+---------+----------+ | id | name | min(age) | +----+---------+----------+ | 2 | takeshi2| 25 | +----+---------+----------+

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

  • ベストアンサー
  • n09430515
  • ベストアンサー率52% (11/21)
回答No.1

直感的に分かり易いのは下記です。 select * from test where age = ( select min(age) from test );

rio_grande
質問者

お礼

ご回答有り難うございました。とりあえずこのやり方が一番基本のような気がするのでここからスタートします。

その他の回答 (2)

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.3

ageに索引がはってあるなら select * from test t1 where not exists ( select 1 from test t2 where t1.age > t2.age ) が効率的かも。

rio_grande
質問者

お礼

勉強になりました。有り難うございました。

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

>最年少のレコードを取り出したいだけなのですが >idとnameは一行目が取り出されているよう 誰もが通る道ですねぇ・・・SQLの考え方の問題なので そう単純にはできません。 そもそもSELECTでMINを拾っているだけで、その他の項目を それに紐づける条件になっていませんからね また最年少が1人しかいないと限りません。そのあたりの 定義がいい加減だといつまでも回答にとどきませんよ。 ちなみに簡単なのは select id, name, age from test order by age asc limit 1;

rio_grande
質問者

お礼

ご回答有り難うございました。最年少が複数いてもとにかく1行返す場合のやり方ですね。

関連するQ&A