복붙노트

[SQL] 먼저 특정 필드 값에 의해 주문

SQL

먼저 특정 필드 값에 의해 주문

내가 3 열이있는 테이블이 있습니다 :

id | name | priority
--------------------
 1 | core  |   10
 2 | core  |   9
 3 | other |   8
 4 | board |   7
 5 | board |   6
 6 | core  |   4

나는 우선 순위가 낮은 경우에도 우선 순위가 있지만 이름 = 코어가 해당 행을 사용하여 결과 세트를 주문합니다. 결과는 다음과 같아야합니다

id | name | priority
--------------------
 6 | core  |   4
 2 | core  |   9
 1 | core  |   10
 5 | board |   6
 4 | board |   7
 3 | other |   8

해결법

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

    1.MySQL의 FIELD 기능도 있습니다.

    MySQL의 FIELD 기능도 있습니다.

    당신은 모든 가능한 값에 대한 완전한 정렬을 원하는 경우 :

    SELECT id, name, priority
    FROM mytable
    ORDER BY FIELD(name, "core", "board", "other")
    

    당신은 단지 그 "코어"걱정 경우 먼저이고 다른 값은 상관 없어 :

    SELECT id, name, priority
    FROM mytable
    ORDER BY FIELD(name, "core") DESC
    

    먼저 "핵심"정상적인 정렬 순서에서 다른 필드를 기준으로 정렬하려면 :

    SELECT id, name, priority
    FROM mytable
    ORDER BY FIELD(name, "core") DESC, priority
    

    몇 가지주의 사항이 여기에있다 불구하고 있습니다 :

    첫째, 나는이 MySQL의 전용 기능입니다 확신합니다 - 질문은 태그 MySQL은,하지만 당신은 절대 모릅니다.

    둘째, 필드 () 작동 방법에주의 :이 값의 1부터 인덱스를 반환 - "핵심은"값이있는 경우 필드의 경우 (우선 순위는, "핵심")는 1을 반환 할 수 있습니다. 필드의 값이 목록에없는 경우는 0을 반환합니다. 모든 가능한 값을 지정하지 않는 DESC가 필요한 이유입니다.

  2. ==============================

    2.일반적으로 당신이 할 수있는

    일반적으로 당신이 할 수있는

    select * from your_table
    order by case when name = 'core' then 1 else 2 end,
             priority 
    

    특히 MySQL은 당신도 할 수있다

    select * from your_table
    order by name <> 'core',
             priority 
    

    MySQL은 비교의 결과가 0 또는 1이고, 때문에 당신은 그 결과를 기준으로 정렬 할 수 있습니다.

  3. ==============================

    3.특정 행에 우선 순위를 부여하는 한 가지 방법은 우선 순위에 많은 수를 추가하는 것입니다. 당신은 CASE 문을 사용하여이 작업을 수행 할 수 있습니다

    특정 행에 우선 순위를 부여하는 한 가지 방법은 우선 순위에 많은 수를 추가하는 것입니다. 당신은 CASE 문을 사용하여이 작업을 수행 할 수 있습니다

      select id, name, priority
        from mytable
    order by priority + CASE WHEN name='core' THEN 1000 ELSE 0 END desc
    

    데모 : http://www.sqlfiddle.com/#!2/753ee/1

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

    4.포스트 그레스 9 +를 사용하여 나를 위해이 작품 :

    포스트 그레스 9 +를 사용하여 나를 위해이 작품 :

    SELECT *
    FROM your_table
    ORDER BY name = 'core' DESC, priority DESC
    
  5. ==============================

    5.한 가지 방법은 이것이다 :

    한 가지 방법은 이것이다 :

    select id, name, priority from table a
    order by case when name='core' then -1 else priority end asc, priority asc
    
  6. ==============================

    6.

    SELECT * FROM cars_new WHERE status = '1' and car_hide !='1' and cname IN ('Executive Car','Saloon','MPV+','MPV5') ORDER BY FIELD(cname, 'Executive Car', 'Saloon','MPV+','mpv5')
    
  7. ==============================

    7.이 작업을 수행:

    이 작업을 수행:

    SELECT * FROM table ORDER BY column `name`+0 ASC
    

    +0를 추가하면 것을 의미합니다 :

    0, 10, 11, 2, 3, 4
    

    된다 :

    0, 2, 3, 4, 10, 11
    
  8. ==============================

    8.이 옵션을 사용합니다 :

    이 옵션을 사용합니다 :

    SELECT * 
    FROM tablename 
    ORDER BY priority desc, FIELD(name, "core")
    
  9. from https://stackoverflow.com/questions/14104055/ordering-by-specific-field-value-first by cc-by-sa and MIT license