복붙노트

[SQL] MySQL의 SQL은 : 특정 항목을 먼저하고 그 다음 나머지 항목을 정렬

SQL

MySQL의 SQL은 : 특정 항목을 먼저하고 그 다음 나머지 항목을 정렬

나는 아래의 표를 가지고 있다고 할 수 있습니다.

나는 모든 친구를 얻을 싶지만는 ID (5) 목록의 첫 번째 항목되고 싶어요. 나는 나머지 항목을 수신하는 순서에 대해 걱정하지 않는다.

원하는 쿼리 결과는 다음과 같습니다

friends
-------

id    name

5     nahum
1     moshe
2     haim
3     yusuf
4     gedalia
6     dana

이걸 어떻게 할 수 있습니까?

의 MySQL 5.1.x 버전을 사용하여

감사!

해결법

  1. ==============================

    1.

    select id,name 
    from friends 
    order by id=5 desc
    

    (당신은 예를 들어, 그렇지 않으면, 나머지 순서 상관 ID를 오름차순으로 휴식하지 않습니다 제공)

    select id,name 
    from friends 
    order by id=5 desc, id asc
    
  2. ==============================

    2.이 시도:

    이 시도:

    select id,name 
    from friends 
    order by case when id=5 then -1 else id end
    

    당신은 두 개 이상의있는 경우에 당신은 할 수 있습니다 :

    select id,name 
    from friends 
    order by case when id in (5,15,25) then -1 else id end,id
    
  3. ==============================

    3.이 반전 될 수 있도록 나는 시험에 지금의 MySQL에 액세스 할 수 없습니다 ...하지만 당신은 부울 또한 종류의 사실을 사용할 수 있으며, 여러 종류의 필드를 가질 수 있습니다.

    이 반전 될 수 있도록 나는 시험에 지금의 MySQL에 액세스 할 수 없습니다 ...하지만 당신은 부울 또한 종류의 사실을 사용할 수 있으며, 여러 종류의 필드를 가질 수 있습니다.

    SELECT ... ORDER BY id != 5, id
    

    (당신은 내가 기억할 수없는, 쓰기 ID = 5해야 할 수도 종류 전이나 FALSEs 후 TRUEs.)

    편집 : 아, 난 그냥 당신이 내가 진심으로 리차드의 대답 @ 추천이 경우 나머지 순서에 대해 걱정하지 않는다 읽어 보시기 바랍니다.

  4. ==============================

    4.당신이 UNION 쿼리에 대한 동일한 작업을 수행하려는 경우, 예를 들어, 당신은있는 경우 :

    당신이 UNION 쿼리에 대한 동일한 작업을 수행하려는 경우, 예를 들어, 당신은있는 경우 :

    select id,name 
    from friends 
    UNION
    select id,name 
    from friends 
    order by id=5 desc
    

    ... 당신은 PostgreSQL의에서 예외를 얻을 것입니다 :

    만 열 이름이 표현이나 기능이 아니라 사용할 수 있습니다 발생합니다. 힌트 : 모든 SELECT에 표현 / 기능을 추가하거나 절에서로 UNION 이동

    이 문제를 얻으려면, 당신은 다음을 사용합니다 :

    select id,name, (id=5) AS is_five
    from friends 
    UNION
    select id,name, (id=5) AS is_five
    from friends 
    order by is_five DESC, id DESC
    

    먼저 't'항목을 주문 것이다 의해 순서 있도록 식 (식 5) 다음, 해당 열의 값은 기대 값 (5)과 동일한 지의 여부에 따라 'T'또는 'F'를 반환 쉬다.

  5. ==============================

    5.당신은이 문제를 해결하기 위해 FIELD 절에 의해 MySQL의의 ORDER를 사용해야합니다. 대답이 접수되었습니다 만, 여기에 더 나은 솔루션입니다.

    당신은이 문제를 해결하기 위해 FIELD 절에 의해 MySQL의의 ORDER를 사용해야합니다. 대답이 접수되었습니다 만, 여기에 더 나은 솔루션입니다.

    select 1 id, 'Zeta' order_col union all
    select 2 id, 'Alpha' order_col union all
    select 3 id, 'Gamma' order_col union all
    select 4 id, 'Phi' order_col union all
    select 5 id, 'Delta' order_col union all
    select 6 id, 'Delta' order_col union all
    select 7 id, 'Alpha' order_col union all
    select 8 id, 'Gamma' order_col union all
    select 9 id, 'Zeta' order_col union all
    select 10 id, 'Phi' order_col 
    order by field (order_col, 'Alpha', 'Gamma', 'Phi', 'Delta', 'Zeta'), id;
    

    이것은보다 낫다

  6. ==============================

    6.당신은 MySQL의에서 필드 ()를 사용할 수 있습니다.

    당신은 MySQL의에서 필드 ()를 사용할 수 있습니다.

    select id,name from friends order by field(id,5,id)
    

    필드의 첫번째 매개 변수는 (), 나머지는 순서가 당신이 정렬 할 필드 것을 의미한다.

    그래서 5 종류의 첫번째, 그리고 (5 없음) ID에서 나머지합니다. 당신이 앞에로 5,1,3을 원하는 경우 필드 (ID, 5,1,3, ID)처럼 할 수 있습니다.

    5 필드 (아이디, 아이디, 5)에 의해 마지막에 정렬 선택 될 수있다. 제 2 회 ID는 또한 그것에서 5 제외됩니다.

  7. ==============================

    7.이 코드 중복을 가지고 있지만 그 트릭을 수행하기 때문에 조금 못생긴 :

    이 코드 중복을 가지고 있지만 그 트릭을 수행하기 때문에 조금 못생긴 :

    select .... where id = 5 
    union
    select .... where not id = 5
    
  8. from https://stackoverflow.com/questions/5417980/mysql-sql-specific-item-to-be-first-and-then-to-sort-the-rest-of-the-items by cc-by-sa and MIT license