2013-09-06 2 views
2

필자는 심지어 문구가 맞다고 생각하지 않지만 정렬 전후에 테이블을 표시합니다.mysql의 다른 열에 쌍을 내림차순으로 매칭하여 정렬하는 방법

정렬하기 전에 :

___________________ 
| NAME | AGE | 
|==================| 
| Ace  | 23 | 
| May  | 15 | 
| Ann  | 21 | 
| May  | 38 | 
| Ace  | 77 | 
| Ann  | 35 | 
|==================| 

정렬 후 :

___________________ 
| NAME | AGE | 
|==================| 
| Ace  | 77 | 
| Ace  | 23 | 
| May  | 38 | 
| May  | 15 | 
| Ann  | 35 | 
| Ann  | 21 | 
|==================| 

그래서 같이 사용자가 동일한 이름을 가진 사람을 짝 것이다, 나는 내림차순으로 연령별로 분류하고 볼 수 있지만, 함께. MySQL에서 어떻게합니까?

감사합니다.

+0

테이블에 PRIMARY KEY가 없으면 실제로 테이블이 아닙니다. 무엇 당신이야? – Strawberry

답변

8

최대 연령의 테이블에 가입해야합니다. 여기에 한 가지 방법입니다 :

select t.* 
from t join 
    (select name, max(age) as maxage 
     from t 
     group by name 
    ) tsum 
    on tsum.name = t.name 
order by tsum.maxage desc, t.name, t.age desc; 

편집 :

나는 당신의 질문에 대한 대답은 order by 절에 t.age desc을두고있다 생각합니다. Here은 코드를 보여주는 SQL Fiddle입니다.

두 번째 질문의 경우 where 절은 order by 바로 앞에 올 것입니다.

+0

하나의 테이블입니다. SELECT * FROM 테이블 ORDER BY NAME ASC, AGE DESC는 join없이 동일한 작업을 수행합니다. – bksi

+1

@bksi. . . 아닙니다. 이름은 사전 순으로 정렬되지 않으며 표의 최대 연령에 따라 정렬됩니다. –

+0

거의 효과가 있었으며 연령 부분의 '5 월'결과가 잘못된 순서로 나타납니다. 그것은 15, 38을 보여줍니다. 목록에있는 다른 사람들은 괜찮습니다. 또한 반복없이 이름을 추가하면 순서가 잘못되어있는 다른 사람을 던지는 것처럼 보입니다. 또한 WHERE 절을 넣으면 ORDER BY 앞에 넣을까요? – torrentialdata

관련 문제