[mysql] 특정 필드 값을 기준으로 먼저 정렬

3 개의 열이있는 테이블이 있습니다.

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

우선 순위가 낮더라도 priority먼저 행을 사용하여 결과 집합을 정렬하고 싶습니다 name=core. 결과는 다음과 같아야합니다.

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



답변

도있다 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 태그가 지정되어 있지만 여러분은 결코 알 수 없습니다.

둘째, FIELD()작동 방식에 주의 하십시오. 값 의 1 기반 인덱스FIELD(priority, "core")반환합니다.의 경우 “core”가 값이면 1을 반환합니다. 필드 값이 목록에 없으면 0 을 반환 합니다 . 이것이 DESC가능한 모든 값을 지정하지 않는 한 필요한 이유 입니다.


답변

일반적으로 할 수 있습니다.

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정렬 할 수 있습니다.


답변

특정 행에 우선 순위를 부여하는 한 가지 방법은 우선 순위에 많은 수를 추가하는 것입니다. 다음 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


답변

이것은 Postgres 9 이상을 사용하는 나를 위해 작동합니다.

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


답변

한 가지 방법은 다음과 같습니다.

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


답변

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')


답변

이 작업을 수행:

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

+0을 추가하면 다음을 의미합니다.

0, 10, 11, 2, 3, 4

됩니다 :

0, 2, 3, 4, 10, 11