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