SQL 다중 열 순서


635

SQL의 여러 열을 기준으로 다른 방향으로 정렬하려고합니다. column1내림차순과 column2오름차순으로 정렬됩니다.

어떻게해야합니까?


85
이것이 "구글링 답변"첫 번째 결과입니다. 적어도 "2 개의 열로 SQL 주문"을 검색했을 때였습니다. 검색어를 "mysql 'order by'"로 변경하기 전까지는 첫 번째 결과 페이지에 표시되지 않은 동등한 공식 문서 페이지보다 훨씬 읽기
Andrew Martin

11
SO 질문이 Google에서 얼마나 자주 나오는지 감안할 때 사람들이 항상 대답하는 것은 끔찍한 일입니다. SO가 답을 구하기 위해 여기에 있습니다. 왜 사이트 트래픽을 차단하는 것이 좋은지 이해할 수 없습니다.
user001

답변:


1023
ORDER BY column1 DESC, column2

이렇게 하면 두 개 이상의 행에 대한 필드가 같을 때마다 column1(내림차순) 모든 항목을 정렬 한 다음 column2(기본값은 오름차순) 정렬 column1합니다.


2
여기에 column1 또는 column2를 주문하는 방법은 무엇입니까?
PoliDev

@PoliDev, 첫 번째 열은 DESCending 순서로, column2는 (오름차순) 정렬
zaheer

110
명확성을 위해, column1먼저 두 행 column2column1필드가 같은 경우 마다 모든 항목을 정렬 합니다.
Nick Benes

2
RDBMS 한도까지 열 뿐만 아니라 여러 표현식에 사용할 수 있습니다.
Ignacio Vazquez-Abrams

2
@NickBenes ... 또는 말할 수 있습니다 : 정렬 기준으로 정렬 한 column2다음 STABLE 정렬 기준을 수행합니다 column1. 이것은 안정적인 정렬이 무엇인지 아는 사람들에게 더 분명합니다.
Atom

356

다른 답변에는 구체적인 예가 없으므로 여기에 있습니다.

다음과 같은 People 테이블이 제공됩니다.

 FirstName |  LastName   |  YearOfBirth
----------------------------------------
  Thomas   | Alva Edison |   1847
  Benjamin | Franklin    |   1706
  Thomas   | More        |   1478
  Thomas   | Jefferson   |   1826

아래 쿼리를 실행하면 :

SELECT * FROM People ORDER BY FirstName DESC, YearOfBirth ASC

결과 집합은 다음과 같습니다.

 FirstName |  LastName   |  YearOfBirth
----------------------------------------
  Thomas   | More        |   1478
  Thomas   | Jefferson   |   1826
  Thomas   | Alva Edison |   1847
  Benjamin | Franklin    |   1706

23
이 답변은 매우 유용하고 짧은 답변에 대한 훌륭한 보충 자료입니다.
enderland

3
좋은 예입니다. 많은 사람들이 주문 쿼리에 2 개의 열을 넣더라도 실제로는 발생하지 않는 한 번에 2 개의 열을 정렬 할 수 있다고 생각합니다.
Muhammad Faraz

세 개의 열로 정렬 할 때 동일한 결과를 제공하며 첫 번째 열 정렬 순서는 동일하며 나머지는 모두 다릅니다. 예 : : 1.Firstname asc, Lastname desc, yearOfBirst asc and 2.Firstname asc, Lastname desc, yearOfBirst desc 이것을 극복 할 수있는 방법이 있습니까?
Paramesh Korrakuti

1
@ParameshKorrakuti : 예상되는 결과입니다. 예제에서 결과 순서는 FirstName, LastName별개의 항목 이 중복 된 경우에만 다를 수 있습니다.YearOfBirth
Thomas CG de Vilhena

예를 들어 주셔서 감사합니다. 나와 같은 사람들이 이해하게 만듭니다.
thippu


19

여러 열 순서는 두 열의 해당 값에 따라 다릅니다. 다음은 알파벳과 숫자로 이름이 지정된 두 개의 열이 있고이 두 열의 값이 ascdesc 순서 인 테이블 예 입니다.

여기에 이미지 설명을 입력하십시오

이제 아래 명령을 실행 하여이 두 열에서 Order By 를 수행합니다.

여기에 이미지 설명을 입력하십시오

이제 다시이 두 열에 새 값을 삽입합니다. 여기서 ASC 순서의 알파벳 값은 다음과 같습니다.

여기에 이미지 설명을 입력하십시오

예제 테이블의 열은 다음과 같습니다. 이제 동일한 작업을 다시 수행하십시오.

여기에 이미지 설명을 입력하십시오

첫 번째 열의 값은 desc 순서이지만 두 번째 열은 ASC 순서가 아닙니다.


이 데이터도 삽입하십시오 (g, 10),(g,12). 그런 다음 주문 조회를 실행하면 ASC주문으로 두 번째 열이 표시됩니다 (즉g-10,g-11,g-12)
Pugal

6

여러 조건에서 여러 주문을 사용할 수 있습니다.

ORDER BY 
     (CASE 
        WHEN @AlphabetBy = 2  THEN [Drug Name]
      END) ASC,
    CASE 
        WHEN @TopBy = 1  THEN [Rx Count]
        WHEN @TopBy = 2  THEN [Cost]
        WHEN @TopBy = 3  THEN [Revenue]
    END DESC 

"ORDER BY"내부에 "CASE"를 사용하면 인덱싱이 작동합니까?
Rousonur Jaman
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.