2009-05-01 3 views
1

예를 들어 나는 사람들의 이름과 나이를 가진 테이블을 가지고있다. 나는 가장 오래된 사람들을 끌어낼 MySQL의 일반 쿼리를 원한다.MySQL에서 일반적인 결과를 얻기위한 일반적인 방법

SELECT * FROM people ORDER BY age DESC LIMIT 1; 

말 Frank와 에밀리는 모두 구십구년 나이 :

나는 이런 식으로 뭔가를 사용할 수 있습니다. limit 1은 이름 중 하나만 반환합니다. 난 당신이 또한 하위 쿼리하여이 작업을 수행 할 수 있습니다 알고

SELECT * FROM people WHERE MAX(age); 

,하지만이 달성 쉽게,보다 일반적인 방법이 있어야합니다 : 사이비-SQL에서 나는 쿼리는 다음과 같이할까요?

답변

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. Bah, 서브 쿼리는 조금 어색한 것 같습니다. –

1

난 당신이 또한 하위 쿼리와 함께이 작업을 수행 할 수 있습니다 알고 있지만 쉽게이 있어야합니다, 이것을 달성하는 일반적인 방법?

ANSI SQL에 없습니다.

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

내가 동의 :이 ANSI/ISO SQL입니다 부질없이 : P1 INNER가 GROUP P1.ID에 의해 P1.ID = P2.ID ON P2 AS 명을 가입 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은 서브 쿼리에서 작동하지 않습니다.