2009-05-01 9 views
1

たとえば、私は人とその年齢の名前を持つテーブルを持っています。 MySQLで一般的なクエリを実行して、最も古いn人を引き出します。MySQLの一般的な方法で最高の結果を得る

SELECT * FROM people ORDER BY age DESC LIMIT 1; 

セイフランクとエミリーは、両方の99歳以下のとおりです。

私はこのようなものを使用することができます。 limit 1は、その名前の1つだけを返します。私は、クエリは次のようになりたいと思う疑似-SQLで:

SELECT * FROM people WHERE MAX(age); 

私はあなたにもサブクエリでこれを行うことができます知っているが、これを達成するためのより簡単に、より一般的な方法が存在しなければなりませんか?

答えて

2

いいえ、サブクエリです。例えば、上位3歳と皆:

SELECT * FROM people WHERE age IN (SELECT DISTINCT age FROM people ORDER BY age DESC LIMIT 3) 

か、単にトップ年齢:

SELECT * FROM people WHERE age = (SELECT MAX(age) FROM people) 
+1

Cletusでは、なぜMAX集合体ではなくサブクエリでLIMITを使用しますか?そして、あなたが限界1を行っているなら、なぜDISTINCTですか? – tpdi

+0

あなたは大丈夫です。修正されました。 – cletus

+0

Coolio。バー、サブクエリは少し厄介なようです。 –

1

は、私はあなたにもサブクエリでこれを行うことができます知っているが、簡単に存在しなければなりません、これを達成するためのより一般的な方法は?

ANSI SQLではありません。

SELECT * FROM people WHERE age = 
    (select MAX(age) from people); 
+0

は、私は反対する:これはANSI/ISO SQLでのサブクエリなし:P1 INNERが GROUP BY P1.ID P1.ID = P2.ID ON P2 AS人々を結合として人々からP1.ID、P2.Age を選択して、 P2.Age P1.Age = MAX(P2age); – onedaywhen

+0

コメントは無視してください(削除できません)。 – onedaywhen

0

@cletus -

SELECT * 
FROM people 
WHERE age IN (SELECT DISTINCT age 
       FROM people 
       ORDER BY age DESC LIMIT 3) 

LIMITは、MySQLにおけるサブクエリでは動作しません。

関連する問題