테스트 사이트 - 개발 중인 베타 버전입니다

SQL 정렬 두번 질문 채택완료

선셋 3년 전 조회 3,498

SELECT * FROM g5_member WHERE 1 ORDER BY mb_no ASC LIMIT 10

이렇게 mb_no로 먼저 정렬하고

또 위의 쿼리 결과를 또 mb_point DESC로 정렬하고 싶습니다.

이런 경우에는 어떻게 해야하나요?

 

SELECT * FROM g5_member WHERE 1 ORDER BY mb_no ASC, mb_point DESC LIMIT 10

이렇게 하니 mb_no로만 정렬되고 mb_point는 정렬이 안되네요.

댓글을 작성하려면 로그인이 필요합니다.

답변 4개

채택된 답변
+20 포인트
플래토
3년 전

질문이 잘못되었네요

 

mb_no를 정렬한후

정렬한 값에서

mb_point로 정렬한다..

위의 쿼리가 맞습니다

 

그런데, 정렬한후 다시 정렬하고 싶다에 누락된건 범위 입니다.

 

지금 숨은 의도가.. 아마도. 10개로 구성된 페이지 내에서 라는 말이 누락된거 같은데

그러면 페이지라는 한정된 값이 등장해야 하거든요

그럴경우엔

 

order by mb_no asc limit 10

으로만 추출한후

다시 mb_point로 정렬을 하고 싶은것으로 보여집니다.

그러면 서브쿼리화시킨후 재조회대상이 되면 됩니다.

 

select * from (

    SELECT * FROM g5_member

    WHERE 1 ORDER BY mb_no ASC LIMIT 10

) x

order by mb_point DESC

 

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

... order by if( mb_no < 10, 0, 1), mb_point DESC limit 10

도 가능하지만 subquery 방식을 추천합니다.

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

3년 전

질문이 이해가 안되네요

mb_no  1~10을 포인트 순으로 정렬한다는 말인가요?

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

e
3년 전

SELECT * FROM g5_member WHERE 1 ORDER BY mb_point DESC, mb_no ASC LIMIT 10

이렇게 해보세요..

로그인 후 평가할 수 있습니다

답변에 대한 댓글 2개

선셋
3년 전
이렇게 하면 mb_no의 범위가 1번 부터 끝까지 잡히는데 제가 하고싶은건 mb_no를 1번 부터 차례대로 정렬한 후 그 정렬한 값에서 mb_point로 다시 정렬하고 싶습니다.
e
eyekiss
3년 전
정렬은 기본 규칙은 첫번째로 정렬 후 동일한 값일때,
두번째 기준으로 정렬이 됩니다.

1. mb_no로 정렬하면 동일한 값이 없으므로, mb_point 정렬은 의미가 없게 되구요..
2. mb_point 정렬 후 포인트가 동일한 경우, mb_no 순으로 정렬이 되는 겁니다.

원하시는걸 이해하지 못하겠네요??^^;;

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인