[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.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.일반적으로 당신이 할 수있는
일반적으로 당신이 할 수있는
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.특정 행에 우선 순위를 부여하는 한 가지 방법은 우선 순위에 많은 수를 추가하는 것입니다. 당신은 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.포스트 그레스 9 +를 사용하여 나를 위해이 작품 :
포스트 그레스 9 +를 사용하여 나를 위해이 작품 :
SELECT * FROM your_table ORDER BY name = 'core' DESC, priority DESC
-
==============================
5.한 가지 방법은 이것이다 :
한 가지 방법은 이것이다 :
select id, name, priority from table a order by case when name='core' then -1 else priority end asc, priority asc
-
==============================
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.이 작업을 수행:
이 작업을 수행:
SELECT * FROM table ORDER BY column `name`+0 ASC
+0를 추가하면 것을 의미합니다 :
0, 10, 11, 2, 3, 4
된다 :
0, 2, 3, 4, 10, 11
-
==============================
8.이 옵션을 사용합니다 :
이 옵션을 사용합니다 :
SELECT * FROM tablename ORDER BY priority desc, FIELD(name, "core")
from https://stackoverflow.com/questions/14104055/ordering-by-specific-field-value-first by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] MySQL의 업데이트 쿼리에 '필드 목록'오류 알 수없는 열 (0) | 2020.03.21 |
---|---|
[SQL] OPENQUERY에서 매개 변수를 포함 (0) | 2020.03.21 |
[SQL] PHP 내에서 .SQL 파일로드 (0) | 2020.03.21 |
[SQL] 비 기본 키 외래 키 (0) | 2020.03.21 |
[SQL] SQL은 - 어떻게 저장하고 탐색 계층 구조가? (0) | 2020.03.21 |